blob: 6eef1f34bc5dfdf4fbcefcfea36eb635d828d940 [file] [log] [blame]
Scott Baker5f38c7b2017-08-18 10:12:49 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
17import exceptions
Scott Baker7dddd512017-10-24 10:13:34 -070018import os
Scott Baker5f38c7b2017-08-18 10:12:49 -070019import random
20import shutil
21import string
22import sys
23import unittest
24
25# Command-line argument of -R will cause this test to use a real grpc server
26# rather than the fake stub.
27
28# TODO: Investigate writing wrapper unit tests using mocks rather than using the ORM test framework
29
Scott Baker7dddd512017-10-24 10:13:34 -070030# by default, use fake stub rather than real core
31USE_FAKE_STUB=True
32
33PARENT_DIR=os.path.join(os.path.dirname(__file__), "..")
Scott Baker5f38c7b2017-08-18 10:12:49 -070034
35class TestWrappers(unittest.TestCase):
Scott Baker7dddd512017-10-24 10:13:34 -070036 def setUp(self):
Scott Bakere5f0f682018-06-18 10:21:35 -070037 from xosconfig import Config
38 test_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
39 config = os.path.join(test_path, "test_config.yaml")
40 Config.clear()
41 Config.init(config, 'synchronizer-config-schema.yaml')
42
Scott Baker7dddd512017-10-24 10:13:34 -070043 if (USE_FAKE_STUB):
44 sys.path.append(PARENT_DIR)
45
46 def tearDown(self):
47 if (USE_FAKE_STUB):
48 sys.path.remove(PARENT_DIR)
49
Scott Baker5f38c7b2017-08-18 10:12:49 -070050 def make_coreapi(self):
51 if USE_FAKE_STUB:
Scott Baker7dddd512017-10-24 10:13:34 -070052 import xosapi.orm
Scott Bakerb96ba432018-02-26 09:53:48 -080053 from fake_stub import FakeStub, FakeObj, FakeProtos
Scott Baker7dddd512017-10-24 10:13:34 -070054
Scott Baker5e4fc082018-05-24 09:48:56 -070055 xosapi.orm.import_convenience_methods()
56
Scott Baker5f38c7b2017-08-18 10:12:49 -070057 stub = FakeStub()
Scott Bakerb96ba432018-02-26 09:53:48 -080058 api = xosapi.orm.ORMStub(stub=stub, package_name = "xos", protos=FakeProtos(), empty = FakeObj, enable_backoff = False)
Scott Baker5f38c7b2017-08-18 10:12:49 -070059 return api
60 else:
61 return xos_grpc_client.coreapi
62
63 def test_service_get_composable_networks(self):
64 orm = self.make_coreapi()
65 deployment = orm.Deployment(name="test_deployment")
66 deployment.save()
67 controller = orm.Controller(name="test_controller", deployment_id = deployment.id)
68 controller.save()
69 site = orm.Site(name="testsite")
70 site.save()
71 user = orm.User(email="fake_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10)), site_id=site.id)
72 user.save()
73 vsg_access_template = orm.NetworkTemplate(name="vsg_access", vtn_kind="VSG")
74 vsg_access_template.save()
75 service_one = orm.Service(name="service_one")
76 service_one.save()
77 slice_one = orm.Slice(name="testsite_sliceone", service_id = service_one.id, site_id = site.id, creator_id = user.id, network = "noauto")
78 slice_one.save()
79 network_one = orm.Network(name="testsite_sliceone_access", owner_id = slice_one.id, template_id = vsg_access_template.id)
80 network_one.save()
81 ns = orm.NetworkSlice(slice_id = slice_one.id, network_id = network_one.id)
82 ns.save()
83 cn_one = orm.ControllerNetwork(network_id = network_one.id, controller_id = controller.id)
84 cn_one.save()
85
86 if USE_FAKE_STUB:
87 # fake_Stub doesn't handle reverse foreign keys
88 service_one.slices_ids = [slice_one.id]
89 slice_one.networks_ids = [network_one.id]
90 network_one.controllernetworks_ids = [cn_one.id]
91
92 # make sure we're using a fresh copy of the object, with all its foreign keys filled in
93 service_one = orm.Service.objects.get(id=service_one.id)
94
95 cns = service_one.get_composable_networks()
96 self.assertEqual(len(cns), 1)
97 self.assertEqual(cns[0].id, network_one.id)
98
Scott Baker8f36c3f2017-09-26 16:44:36 -070099 def test_service_get_service_instance_class_name(self):
100 orm = self.make_coreapi()
101 deployment = orm.Deployment(name="test_deployment")
102 deployment.save()
103 controller = orm.Controller(name="test_controller", deployment_id = deployment.id)
104 controller.save()
105 site = orm.Site(name="testsite")
106 site.save()
107 user = orm.User(email="fake_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10)), site_id=site.id)
108 user.save()
109 vsg_access_template = orm.NetworkTemplate(name="vsg_access", vtn_kind="VSG")
110 vsg_access_template.save()
111 service_one = orm.Service(name="service_one")
112 service_one.save()
113
114 self.assertEqual(service_one.get_service_instance_class_name(), "ServiceInstance")
115
116 def test_service_get_service_instance_class(self):
117 orm = self.make_coreapi()
118 deployment = orm.Deployment(name="test_deployment")
119 deployment.save()
120 controller = orm.Controller(name="test_controller", deployment_id=deployment.id)
121 controller.save()
122 site = orm.Site(name="testsite")
123 site.save()
124 user = orm.User(
125 email="fake_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10)),
126 site_id=site.id)
127 user.save()
128 vsg_access_template = orm.NetworkTemplate(name="vsg_access", vtn_kind="VSG")
129 vsg_access_template.save()
130 service_one = orm.Service(name="service_one")
131 service_one.save()
132
133 self.assertEqual(service_one.get_service_instance_class().model_name, "ServiceInstance")
134
Scott Baker7dddd512017-10-24 10:13:34 -0700135def main():
136 global USE_FAKE_STUB
137 global xos_grpc_client
Scott Baker5f38c7b2017-08-18 10:12:49 -0700138
Scott Baker7dddd512017-10-24 10:13:34 -0700139 # Command-line argument of -R will cause this test to use a real grpc server
140 # rather than the fake stub.
Scott Baker5f38c7b2017-08-18 10:12:49 -0700141
Scott Baker7dddd512017-10-24 10:13:34 -0700142 if "-R" in sys.argv:
143 USE_FAKE_STUB = False
144 sys.argv.remove("-R")
145 # Note: will leave lots of litter (users, sites, etc) behind in the database
Scott Baker5f38c7b2017-08-18 10:12:49 -0700146
Scott Baker7dddd512017-10-24 10:13:34 -0700147 if USE_FAKE_STUB:
148 unittest.main()
149 else:
150 # This assumes xos-client python library is installed, and a gRPC server
151 # is available.
Scott Baker5f38c7b2017-08-18 10:12:49 -0700152
Scott Baker7dddd512017-10-24 10:13:34 -0700153 from twisted.internet import reactor
154 from xosapi import xos_grpc_client
Scott Baker5f38c7b2017-08-18 10:12:49 -0700155
Scott Baker7dddd512017-10-24 10:13:34 -0700156 print "Using xos-client library and core server"
Scott Baker5f38c7b2017-08-18 10:12:49 -0700157
Scott Baker7dddd512017-10-24 10:13:34 -0700158 def test_callback():
159 try:
160 sys.argv = sys.argv[:1] # unittest does not like xos_grpc_client's command line arguments (TODO: find a cooperative approach)
161 unittest.main()
162 except exceptions.SystemExit, e:
163 global exitStatus
164 exitStatus = e.code
Scott Baker5f38c7b2017-08-18 10:12:49 -0700165
Scott Baker7dddd512017-10-24 10:13:34 -0700166 xos_grpc_client.start_api_parseargs(test_callback)
Scott Baker5f38c7b2017-08-18 10:12:49 -0700167
Scott Baker7dddd512017-10-24 10:13:34 -0700168 sys.exit(exitStatus)
Scott Baker5f38c7b2017-08-18 10:12:49 -0700169
Scott Baker7dddd512017-10-24 10:13:34 -0700170if __name__ == "__main__":
171 main()