1010# License for the specific language governing permissions and limitations
1111# under the License.
1212
13- import re
13+ import json
1414import uuid
1515
16- import testtools
17-
1816from openstackclient .tests .functional import base
1917
2018
2119class NetworkTests (base .TestCase ):
2220 """Functional tests for network"""
2321
24- @classmethod
25- def setUpClass (cls ):
26- # Set up some regex for matching below
27- cls .re_id = re .compile ("id\s+\|\s+(\S+)" )
28- cls .re_description = re .compile ("description\s+\|\s+([^|]+?)\s+\|" )
29- cls .re_enabled = re .compile ("admin_state_up\s+\|\s+(\S+)" )
30- cls .re_shared = re .compile ("shared\s+\|\s+(\S+)" )
31- cls .re_external = re .compile ("router:external\s+\|\s+(\S+)" )
32- cls .re_default = re .compile ("is_default\s+\|\s+(\S+)" )
33- cls .re_port_security = re .compile (
34- "port_security_enabled\s+\|\s+(\S+)"
35- )
36-
3722 def test_network_delete (self ):
3823 """Test create, delete multiple"""
3924 name1 = uuid .uuid4 ().hex
40- raw_output = self .openstack (
41- 'network create ' +
25+ cmd_output = json . loads ( self .openstack (
26+ 'network create -f json ' +
4227 '--description aaaa ' +
4328 name1
44- )
29+ ))
30+ self .assertIsNotNone (cmd_output ["id" ])
4531 self .assertEqual (
4632 'aaaa' ,
47- re . search ( self . re_description , raw_output ). group ( 1 ) ,
33+ cmd_output [ "description" ] ,
4834 )
35+
4936 name2 = uuid .uuid4 ().hex
50- raw_output = self .openstack (
51- 'network create ' +
37+ cmd_output = json . loads ( self .openstack (
38+ 'network create -f json ' +
5239 '--description bbbb ' +
5340 name2
54- )
41+ ))
42+ self .assertIsNotNone (cmd_output ["id" ])
5543 self .assertEqual (
5644 'bbbb' ,
57- re . search ( self . re_description , raw_output ). group ( 1 ) ,
45+ cmd_output [ "description" ] ,
5846 )
5947
6048 del_output = self .openstack ('network delete ' + name1 + ' ' + name2 )
6149 self .assertOutput ('' , del_output )
6250
63- @testtools .skip ('broken SDK testing' )
6451 def test_network_list (self ):
6552 """Test create defaults, list filters, delete"""
6653 name1 = uuid .uuid4 ().hex
67- raw_output = self .openstack (
68- 'network create ' +
54+ cmd_output = json . loads ( self .openstack (
55+ 'network create -f json ' +
6956 '--description aaaa ' +
7057 name1
71- )
58+ ))
7259 self .addCleanup (self .openstack , 'network delete ' + name1 )
60+ self .assertIsNotNone (cmd_output ["id" ])
7361 self .assertEqual (
7462 'aaaa' ,
75- re . search ( self . re_description , raw_output ). group ( 1 ) ,
63+ cmd_output [ "description" ] ,
7664 )
7765 # Check the default values
7866 self .assertEqual (
7967 'UP' ,
80- re . search ( self . re_enabled , raw_output ). group ( 1 ) ,
68+ cmd_output [ "admin_state_up" ] ,
8169 )
8270 self .assertEqual (
83- ' False' ,
84- re . search ( self . re_shared , raw_output ). group ( 1 ) ,
71+ False ,
72+ cmd_output [ "shared" ] ,
8573 )
8674 self .assertEqual (
8775 'Internal' ,
88- re . search ( self . re_external , raw_output ). group ( 1 ) ,
76+ cmd_output [ "router:external" ] ,
8977 )
9078 # NOTE(dtroyer): is_default is not present in the create output
9179 # so make sure it stays that way.
92- self .assertIsNone (re .search (self .re_default , raw_output ))
80+ # NOTE(stevemar): is_default *is* present in SDK 0.9.11 and newer,
81+ # but the value seems to always be None, regardless
82+ # of the --default or --no-default value.
83+ # self.assertEqual('x', cmd_output)
84+ if ('is_default' in cmd_output ):
85+ self .assertEqual (
86+ None ,
87+ cmd_output ["is_default" ],
88+ )
9389 self .assertEqual (
94- ' True' ,
95- re . search ( self . re_port_security , raw_output ). group ( 1 ) ,
90+ True ,
91+ cmd_output [ "port_security_enabled" ] ,
9692 )
9793
9894 name2 = uuid .uuid4 ().hex
99- raw_output = self .openstack (
100- 'network create ' +
95+ cmd_output = json . loads ( self .openstack (
96+ 'network create -f json ' +
10197 '--description bbbb ' +
10298 '--disable ' +
10399 '--share ' +
104100 name2
105- )
101+ ))
106102 self .addCleanup (self .openstack , 'network delete ' + name2 )
103+ self .assertIsNotNone (cmd_output ["id" ])
107104 self .assertEqual (
108105 'bbbb' ,
109- re . search ( self . re_description , raw_output ). group ( 1 ) ,
106+ cmd_output [ "description" ] ,
110107 )
111108 self .assertEqual (
112109 'DOWN' ,
113- re . search ( self . re_enabled , raw_output ). group ( 1 ) ,
110+ cmd_output [ "admin_state_up" ] ,
114111 )
115112 self .assertEqual (
116- 'True' ,
117- re .search (self .re_shared , raw_output ).group (1 ),
113+ True ,
114+ cmd_output ["shared" ],
115+ )
116+ if ('is_default' in cmd_output ):
117+ self .assertEqual (
118+ None ,
119+ cmd_output ["is_default" ],
120+ )
121+ self .assertEqual (
122+ True ,
123+ cmd_output ["port_security_enabled" ],
118124 )
119125
120126 # Test list --long
121- raw_output = self .openstack ('network list --long' )
122- self . assertIsNotNone (
123- re . search ( "\|\s+" + name1 + "\s+\|\s+ACTIVE" , raw_output )
124- )
125- self . assertIsNotNone (
126- re . search ( "\|\s+" + name2 + "\s+\|\s+ACTIVE" , raw_output )
127- )
127+ cmd_output = json . loads ( self .openstack (
128+ "network list -f json " +
129+ "--long"
130+ ))
131+ col_name = [ x [ "Name" ] for x in cmd_output ]
132+ self . assertIn ( name1 , col_name )
133+ self . assertIn ( name2 , col_name )
128134
129135 # Test list --long --enable
130- raw_output = self .openstack ('network list --long --enable' )
131- self .assertIsNotNone (
132- re .search ("\|\s+" + name1 + "\s+\|\s+ACTIVE" , raw_output )
133- )
134- self .assertIsNone (
135- re .search ("\|\s+" + name2 + "\s+\|\s+ACTIVE" , raw_output )
136- )
136+ cmd_output = json .loads (self .openstack (
137+ "network list -f json " +
138+ "--enable " +
139+ "--long"
140+ ))
141+ col_name = [x ["Name" ] for x in cmd_output ]
142+ self .assertIn (name1 , col_name )
143+ self .assertNotIn (name2 , col_name )
137144
138145 # Test list --long --disable
139- raw_output = self .openstack ('network list --long --disable' )
140- self .assertIsNone (
141- re .search ("\|\s+" + name1 + "\s+\|\s+ACTIVE" , raw_output )
142- )
143- self .assertIsNotNone (
144- re .search ("\|\s+" + name2 + "\s+\|\s+ACTIVE" , raw_output )
145- )
146+ cmd_output = json .loads (self .openstack (
147+ "network list -f json " +
148+ "--disable " +
149+ "--long"
150+ ))
151+ col_name = [x ["Name" ] for x in cmd_output ]
152+ self .assertNotIn (name1 , col_name )
153+ self .assertIn (name2 , col_name )
146154
147155 # Test list --long --share
148- raw_output = self .openstack ('network list --long --share' )
149- self .assertIsNone (
150- re .search ("\|\s+" + name1 + "\s+\|\s+ACTIVE" , raw_output )
151- )
152- self .assertIsNotNone (
153- re .search ("\|\s+" + name2 + "\s+\|\s+ACTIVE" , raw_output )
154- )
156+ cmd_output = json .loads (self .openstack (
157+ "network list -f json " +
158+ "--share " +
159+ "--long"
160+ ))
161+ col_name = [x ["Name" ] for x in cmd_output ]
162+ self .assertNotIn (name1 , col_name )
163+ self .assertIn (name2 , col_name )
155164
156165 # Test list --long --no-share
157- raw_output = self .openstack ('network list --long --no-share' )
158- self .assertIsNotNone (
159- re .search ("\|\s+" + name1 + "\s+\|\s+ACTIVE" , raw_output )
160- )
161- self .assertIsNone (
162- re .search ("\|\s+" + name2 + "\s+\|\s+ACTIVE" , raw_output )
163- )
166+ cmd_output = json .loads (self .openstack (
167+ "network list -f json " +
168+ "--no-share " +
169+ "--long"
170+ ))
171+ col_name = [x ["Name" ] for x in cmd_output ]
172+ self .assertIn (name1 , col_name )
173+ self .assertNotIn (name2 , col_name )
164174
165- @testtools .skip ('broken SDK testing' )
166175 def test_network_set (self ):
167176 """Tests create options, set, show, delete"""
168177 name = uuid .uuid4 ().hex
169- raw_output = self .openstack (
170- 'network create ' +
178+ cmd_output = json . loads ( self .openstack (
179+ 'network create -f json ' +
171180 '--description aaaa ' +
172181 '--enable ' +
173182 '--no-share ' +
174183 '--internal ' +
175184 '--no-default ' +
176185 '--enable-port-security ' +
177186 name
178- )
187+ ))
179188 self .addCleanup (self .openstack , 'network delete ' + name )
189+ self .assertIsNotNone (cmd_output ["id" ])
180190 self .assertEqual (
181191 'aaaa' ,
182- re . search ( self . re_description , raw_output ). group ( 1 ) ,
192+ cmd_output [ "description" ] ,
183193 )
184194 self .assertEqual (
185195 'UP' ,
186- re . search ( self . re_enabled , raw_output ). group ( 1 ) ,
196+ cmd_output [ "admin_state_up" ] ,
187197 )
188198 self .assertEqual (
189- ' False' ,
190- re . search ( self . re_shared , raw_output ). group ( 1 ) ,
199+ False ,
200+ cmd_output [ "shared" ] ,
191201 )
192202 self .assertEqual (
193203 'Internal' ,
194- re . search ( self . re_external , raw_output ). group ( 1 ) ,
204+ cmd_output [ "router:external" ] ,
195205 )
196206 # NOTE(dtroyer): is_default is not present in the create output
197207 # so make sure it stays that way.
198- self .assertIsNone (re .search (self .re_default , raw_output ))
208+ # NOTE(stevemar): is_default *is* present in SDK 0.9.11 and newer,
209+ # but the value seems to always be None, regardless
210+ # of the --default or --no-default value.
211+ if ('is_default' in cmd_output ):
212+ self .assertEqual (
213+ None ,
214+ cmd_output ["is_default" ],
215+ )
199216 self .assertEqual (
200- ' True' ,
201- re . search ( self . re_port_security , raw_output ). group ( 1 ) ,
217+ True ,
218+ cmd_output [ "port_security_enabled" ] ,
202219 )
203220
204221 raw_output = self .openstack (
@@ -212,32 +229,34 @@ def test_network_set(self):
212229 )
213230 self .assertOutput ('' , raw_output )
214231
215- raw_output = self .openstack ('network show ' + name )
232+ cmd_output = json .loads (self .openstack (
233+ 'network show -f json ' + name
234+ ))
216235
217236 self .assertEqual (
218237 'cccc' ,
219- re . search ( self . re_description , raw_output ). group ( 1 ) ,
238+ cmd_output [ "description" ] ,
220239 )
221240 self .assertEqual (
222241 'DOWN' ,
223- re . search ( self . re_enabled , raw_output ). group ( 1 ) ,
242+ cmd_output [ "admin_state_up" ] ,
224243 )
225244 self .assertEqual (
226- ' True' ,
227- re . search ( self . re_shared , raw_output ). group ( 1 ) ,
245+ True ,
246+ cmd_output [ "shared" ] ,
228247 )
229248 self .assertEqual (
230249 'External' ,
231- re . search ( self . re_external , raw_output ). group ( 1 ) ,
250+ cmd_output [ "router:external" ] ,
232251 )
233252 # why not 'None' like above??
234253 self .assertEqual (
235- ' False' ,
236- re . search ( self . re_default , raw_output ). group ( 1 ) ,
254+ False ,
255+ cmd_output [ "is_default" ] ,
237256 )
238257 self .assertEqual (
239- ' False' ,
240- re . search ( self . re_port_security , raw_output ). group ( 1 ) ,
258+ False ,
259+ cmd_output [ "port_security_enabled" ] ,
241260 )
242261
243262 # NOTE(dtroyer): There is ambiguity around is_default in that
@@ -252,14 +271,16 @@ def test_network_set(self):
252271 )
253272 self .assertOutput ('' , raw_output )
254273
255- raw_output = self .openstack ('network show ' + name )
274+ cmd_output = json .loads (self .openstack (
275+ 'network show -f json ' + name
276+ ))
256277
257278 self .assertEqual (
258279 'cccc' ,
259- re . search ( self . re_description , raw_output ). group ( 1 ) ,
280+ cmd_output [ "description" ] ,
260281 )
261282 # NOTE(dtroyer): This should be 'True'
262283 self .assertEqual (
263- ' False' ,
264- re . search ( self . re_default , raw_output ). group ( 1 ) ,
284+ False ,
285+ cmd_output [ "port_security_enabled" ] ,
265286 )
0 commit comments