X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Ftests%2Fplanetstacktest.py;fp=planetstack%2Ftests%2Fplanetstacktest.py;h=77ed95f9730d4037c88fe042e1daa738b8ba2493;hb=5fdfbbe8bf337cbe68019d9c753376b2ca6ed646;hp=0000000000000000000000000000000000000000;hpb=78ce7694b6fb4a1decf3859f563ef1e3bbdaaa0b;p=plstackapi.git diff --git a/planetstack/tests/planetstacktest.py b/planetstack/tests/planetstacktest.py new file mode 100644 index 0000000..77ed95f --- /dev/null +++ b/planetstack/tests/planetstacktest.py @@ -0,0 +1,94 @@ +import os +import json +import sys +import time + +sys.path.append("/opt/planetstack") + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.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)