--- /dev/null
+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)