| import os |
| import json |
| import sys |
| import time |
| |
| sys.path.append("/opt/xos") |
| |
| os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings") |
| from openstack.manager import OpenStackManager |
| from core.models import Slice, Sliver, ServiceClass, Reservation, Tag, Network, User, Node, Image, Deployment, Site, NetworkTemplate, NetworkSlice |
| |
| TEST_SITE_NAME = "Princeton University" |
| TEST_USER_EMAIL = "sbaker@planetstack.org" |
| TEST_IMAGE_NAME = "Fedora 16 LXC rev 1.3" |
| TEST_NODE_NAME = "viccidev3.cs.princeton.edu" |
| TEST_DEPLOYMENT_NAME = "VICCI" |
| |
| def fail(msg): |
| print msg |
| sys.exit(-1) |
| |
| def fail_unless(condition, msg): |
| if not condition: |
| fail(msg) |
| |
| class PlanetStackTest: |
| def __init__(self): |
| self.objs_saved = [] |
| self.counter = 0 |
| |
| def setup(self): |
| self.manager = OpenStackManager() |
| |
| print "getting test site" |
| self.testSite = Site.objects.get(name=TEST_SITE_NAME) |
| |
| print "getting test user" |
| self.testUser = User.objects.get(email=TEST_USER_EMAIL) |
| |
| print "getting test image" |
| self.testImage = Image.objects.get(name=TEST_IMAGE_NAME) |
| |
| print "getting test node" |
| self.testNode = Node.objects.get(name=TEST_NODE_NAME) |
| |
| print "getting test deployment" |
| self.testDeployment = Deployment.objects.get(name=TEST_DEPLOYMENT_NAME) |
| |
| def save_and_wait_for_enacted(self, x, nonempty_fields=[]): |
| print "saving", x.__class__.__name__, str(x) |
| x.save() |
| self.objs_saved.append(x) |
| print " waiting for", str(x), "to be enacted" |
| tStart = time.time() |
| while True: |
| new_x = x.__class__.objects.get(id=x.id) |
| if (new_x.enacted != None) and (new_x.enacted >= new_x.updated): |
| print " ", str(x), "has been enacted" |
| break |
| time.sleep(5) |
| |
| if nonempty_fields: |
| print " waiting for", ", ".join(nonempty_fields), "to be nonempty" |
| while True: |
| new_x = x.__class__.objects.get(id=x.id) |
| keep_waiting=False |
| for field in nonempty_fields: |
| if not getattr(new_x, field, None): |
| keep_waiting=True |
| if not keep_waiting: |
| break |
| |
| print " saved and enacted in %d seconds" % int(time.time() - tStart) |
| |
| return new_x |
| |
| def make_slice_name(self): |
| self.counter = self.counter +1 |
| return "test-" + str(time.time()) + "." + str(self.counter) |
| |
| def get_network_template(self,name): |
| template = NetworkTemplate.objects.get(name=name) |
| return template |
| |
| def cleanup(self): |
| print "cleaning up" |
| print "press return" |
| sys.stdin.readline() |
| for obj in self.objs_saved: |
| try: |
| print " deleting", str(obj) |
| obj.delete() |
| except: |
| print "failed to delete", str(obj) |