blob: 009ca43f35e01fe451d1fbe638f5c62072702722 [file] [log] [blame]
Scott Bakerc59f1bc2017-12-04 16:55:05 -08001# Copyright 2017-present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15# These are functional tests of ManyToMany relations. These tests need to be conducted end-to-end with a real
16# API to verify that the client and server ends of the API are working with each other.
17
Zack Williams045b63d2019-01-22 16:30:57 -070018from xosapi import xos_grpc_client
Scott Bakerc59f1bc2017-12-04 16:55:05 -080019import sys
20import unittest
21
22orm = None
23
Scott Bakerc59f1bc2017-12-04 16:55:05 -080024
25TEST_NODE_LABEL_1_NAME = "test_node_label_1"
26
Zack Williams045b63d2019-01-22 16:30:57 -070027
Scott Bakerc59f1bc2017-12-04 16:55:05 -080028class TestORM(unittest.TestCase):
29 def setUp(self):
Scott Bakerd2c2e5b2017-12-07 13:46:08 -080030 self.test_node_label_1_name = TEST_NODE_LABEL_1_NAME
Scott Bakerc59f1bc2017-12-04 16:55:05 -080031
32 nodes1 = orm.Node.objects.filter(name="test_node_1")
33 if nodes1:
Zack Williams045b63d2019-01-22 16:30:57 -070034 self.node1 = nodes1[0]
Scott Bakerc59f1bc2017-12-04 16:55:05 -080035 else:
Zack Williams045b63d2019-01-22 16:30:57 -070036 self.node1 = orm.Node(
37 name="test_node_1", site_deployment=orm.SiteDeployment.objects.first()
38 )
Scott Bakerc59f1bc2017-12-04 16:55:05 -080039 self.node1.save()
40
41 nodes2 = orm.Node.objects.filter(name="test_node_2")
42 if nodes2:
Zack Williams045b63d2019-01-22 16:30:57 -070043 self.node2 = nodes2[0]
Scott Bakerc59f1bc2017-12-04 16:55:05 -080044 else:
Zack Williams045b63d2019-01-22 16:30:57 -070045 self.node2 = orm.Node(
46 name="test_node_2", site_deployment=orm.SiteDeployment.objects.first()
47 )
Scott Bakerc59f1bc2017-12-04 16:55:05 -080048 self.node2.save()
49
50 def tearDown(self):
Scott Bakerd2c2e5b2017-12-07 13:46:08 -080051 node_labels1 = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
52 for node_label in node_labels1:
53 node_label.delete()
Scott Bakerc59f1bc2017-12-04 16:55:05 -080054
Scott Bakerd2c2e5b2017-12-07 13:46:08 -080055 nodes1 = orm.Node.objects.filter(name="test_node_1")
56 for node in nodes1:
57 node.delete()
Scott Bakerc59f1bc2017-12-04 16:55:05 -080058
Scott Bakerd2c2e5b2017-12-07 13:46:08 -080059 nodes2 = orm.Node.objects.filter(name="test_node_2")
60 for node in nodes2:
61 node.delete()
Scott Bakerc59f1bc2017-12-04 16:55:05 -080062
63 pass
64
65 def test_create_empty_node_label(self):
Zack Williams045b63d2019-01-22 16:30:57 -070066 n = orm.NodeLabel(name=self.test_node_label_1_name)
Scott Bakerc59f1bc2017-12-04 16:55:05 -080067 n.save()
68
Zack Williams045b63d2019-01-22 16:30:57 -070069 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
70 self.assertEqual(len(labels), 1)
Scott Bakerc59f1bc2017-12-04 16:55:05 -080071
Zack Williams045b63d2019-01-22 16:30:57 -070072 n = labels[0]
Scott Bakerc59f1bc2017-12-04 16:55:05 -080073 self.assertNotEqual(n, None)
74 self.assertEqual(len(n.node.all()), 0)
75
76 def test_create_node_label_one_node(self):
Zack Williams045b63d2019-01-22 16:30:57 -070077 n = orm.NodeLabel(name=self.test_node_label_1_name)
Scott Bakerc59f1bc2017-12-04 16:55:05 -080078 n.node.add(self.node1)
79 n.save()
80
Zack Williams045b63d2019-01-22 16:30:57 -070081 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
82 self.assertEqual(len(labels), 1)
Scott Bakerc59f1bc2017-12-04 16:55:05 -080083
Zack Williams045b63d2019-01-22 16:30:57 -070084 n = labels[0]
Scott Bakerc59f1bc2017-12-04 16:55:05 -080085 self.assertNotEqual(n, None)
86 self.assertEqual(len(n.node.all()), 1)
87
88 def test_create_node_label_two_nodes(self):
Zack Williams045b63d2019-01-22 16:30:57 -070089 n = orm.NodeLabel(name=self.test_node_label_1_name)
Scott Bakerc59f1bc2017-12-04 16:55:05 -080090 n.node.add(self.node1)
91 n.node.add(self.node2)
92 n.save()
93
Zack Williams045b63d2019-01-22 16:30:57 -070094 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
95 self.assertEqual(len(labels), 1)
Scott Bakerc59f1bc2017-12-04 16:55:05 -080096
Zack Williams045b63d2019-01-22 16:30:57 -070097 n = labels[0]
Scott Bakerc59f1bc2017-12-04 16:55:05 -080098 self.assertNotEqual(n, None)
99 self.assertEqual(len(n.node.all()), 2)
100
101 def test_add_node_to_label(self):
Zack Williams045b63d2019-01-22 16:30:57 -0700102 n = orm.NodeLabel(name=self.test_node_label_1_name)
Scott Bakerc59f1bc2017-12-04 16:55:05 -0800103 n.save()
104
Zack Williams045b63d2019-01-22 16:30:57 -0700105 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
Scott Bakerc59f1bc2017-12-04 16:55:05 -0800106 self.assertEqual(len(labels), 1)
Zack Williams045b63d2019-01-22 16:30:57 -0700107 n = labels[0]
Scott Bakerc59f1bc2017-12-04 16:55:05 -0800108 n.node.add(self.node1)
109 n.save()
110
Zack Williams045b63d2019-01-22 16:30:57 -0700111 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
Scott Bakerc59f1bc2017-12-04 16:55:05 -0800112 self.assertEqual(len(labels), 1)
Zack Williams045b63d2019-01-22 16:30:57 -0700113 n = labels[0]
Scott Bakerc59f1bc2017-12-04 16:55:05 -0800114 self.assertEqual(len(n.node.all()), 1)
115
116 def test_remove_node_from_label(self):
117 n = orm.NodeLabel(name=self.test_node_label_1_name)
118 n.node.add(self.node1)
119 n.node.add(self.node2)
120 n.save()
121
122 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
123 self.assertEqual(len(labels), 1)
124 n = labels[0]
125 self.assertEqual(len(n.node.all()), 2)
126 n.node.remove(self.node1)
127 n.save()
128
129 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
130 self.assertEqual(len(labels), 1)
131 n = labels[0]
132 self.assertEqual(len(n.node.all()), 1)
133
134 def test_remove_last_node_from_label(self):
135 n = orm.NodeLabel(name=self.test_node_label_1_name)
136 n.node.add(self.node1)
137 n.save()
138
139 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
140 self.assertEqual(len(labels), 1)
141 n = labels[0]
142 self.assertEqual(len(n.node.all()), 1)
143 n.node.remove(self.node1)
144 n.save(update_fields=["node_ids"])
145
146 labels = orm.NodeLabel.objects.filter(name=self.test_node_label_1_name)
147 self.assertEqual(len(labels), 1)
148 n = labels[0]
149 self.assertEqual(len(n.node.all()), 0)
150
151
152def test_callback():
153 global orm
154
155 orm = xos_grpc_client.coreclient.xos_orm
156
Zack Williams045b63d2019-01-22 16:30:57 -0700157 sys.argv = sys.argv[:1] # unittest gets mad about the orm command line arguments
Scott Bakerc59f1bc2017-12-04 16:55:05 -0800158 unittest.main()
159
Scott Bakerc59f1bc2017-12-04 16:55:05 -0800160
Zack Williams045b63d2019-01-22 16:30:57 -0700161xos_grpc_client.start_api_parseargs(test_callback)