@@ -108,6 +108,26 @@ def _init_subnet_variables(self):
108108 }
109109 )
110110
111+ # An IPv6 subnet to be created with Prefix Delegation options specified
112+ self ._subnet_ipv6_pd = network_fakes .FakeSubnet .create_one_subnet (
113+ attrs = {
114+ 'project_id' : self .project .id ,
115+ 'cidr' : '::/64' ,
116+ 'enable_dhcp' : True ,
117+ 'allocation_pools' : [
118+ {
119+ 'start' : '::1' ,
120+ 'end' : '::ffff:ffff:ffff:ffff' ,
121+ },
122+ ],
123+ 'ip_version' : 6 ,
124+ 'gateway_ip' : '::' ,
125+ 'ipv6_address_mode' : 'slaac' ,
126+ 'ipv6_ra_mode' : 'slaac' ,
127+ 'subnetpool_id' : 'prefix_delegation' ,
128+ }
129+ )
130+
111131 # The network to be returned from find_network
112132 self ._network = network_fakes .create_one_network (
113133 attrs = {
@@ -210,6 +230,29 @@ def _init_subnet_variables(self):
210230 format_columns .ListColumn (self ._subnet_ipv6 .tags ),
211231 )
212232
233+ self .data_ipv6_pd = (
234+ subnet_v2 .AllocationPoolsColumn (
235+ self ._subnet_ipv6_pd .allocation_pools
236+ ),
237+ self ._subnet_ipv6_pd .cidr ,
238+ self ._subnet_ipv6_pd .description ,
239+ format_columns .ListColumn (self ._subnet_ipv6_pd .dns_nameservers ),
240+ self ._subnet_ipv6_pd .enable_dhcp ,
241+ self ._subnet_ipv6_pd .gateway_ip ,
242+ subnet_v2 .HostRoutesColumn (self ._subnet_ipv6_pd .host_routes ),
243+ self ._subnet_ipv6_pd .id ,
244+ self ._subnet_ipv6_pd .ip_version ,
245+ self ._subnet_ipv6_pd .ipv6_address_mode ,
246+ self ._subnet_ipv6_pd .ipv6_ra_mode ,
247+ self ._subnet_ipv6_pd .name ,
248+ self ._subnet_ipv6_pd .network_id ,
249+ self ._subnet_ipv6_pd .project_id ,
250+ self ._subnet_ipv6_pd .segment_id ,
251+ format_columns .ListColumn (self ._subnet_ipv6_pd .service_types ),
252+ self ._subnet_ipv6_pd .subnetpool_id ,
253+ format_columns .ListColumn (self ._subnet_ipv6_pd .tags ),
254+ )
255+
213256 def setUp (self ):
214257 self ._init_subnet_variables ()
215258 super (TestCreateSubnet , self ).setUp ()
@@ -455,6 +498,55 @@ def test_create_options_subnet_range_ipv6(self):
455498 self .assertEqual (self .columns , columns )
456499 self .assertCountEqual (self .data_ipv6 , data )
457500
501+ def test_create_options_subnet_ipv6_pd (self ):
502+ # Mock SDK calls for this test.
503+ self .network_client .create_subnet .return_value = self ._subnet_ipv6_pd
504+ self ._network .id = self ._subnet_ipv6_pd .network_id
505+
506+ arglist = [
507+ self ._subnet_ipv6_pd .name ,
508+ "--network" ,
509+ self ._subnet_ipv6_pd .network_id ,
510+ "--ip-version" ,
511+ str (self ._subnet_ipv6_pd .ip_version ),
512+ "--ipv6-ra-mode" ,
513+ self ._subnet_ipv6_pd .ipv6_ra_mode ,
514+ "--ipv6-address-mode" ,
515+ self ._subnet_ipv6_pd .ipv6_address_mode ,
516+ "--dhcp" ,
517+ "--use-prefix-delegation" ,
518+ ]
519+
520+ verifylist = [
521+ ('name' , self ._subnet_ipv6_pd .name ),
522+ ('network' , self ._subnet_ipv6_pd .network_id ),
523+ ('ip_version' , self ._subnet_ipv6_pd .ip_version ),
524+ ('ipv6_ra_mode' , self ._subnet_ipv6_pd .ipv6_ra_mode ),
525+ ('ipv6_address_mode' , self ._subnet_ipv6_pd .ipv6_address_mode ),
526+ ('dhcp' , self ._subnet_ipv6_pd .enable_dhcp ),
527+ ('use_prefix_delegation' , True ),
528+ ]
529+
530+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
531+ columns , data = self .cmd .take_action (parsed_args )
532+
533+ # Calling with --use-prefix-delegation will set the subnetpool_id
534+ # to 'prefix_delegation'
535+ self .network_client .create_subnet .assert_called_once_with (
536+ ** {
537+ 'enable_dhcp' : self ._subnet_ipv6_pd .enable_dhcp ,
538+ 'ip_version' : self ._subnet_ipv6_pd .ip_version ,
539+ 'ipv6_address_mode' : self ._subnet_ipv6_pd .ipv6_address_mode ,
540+ 'ipv6_ra_mode' : self ._subnet_ipv6_pd .ipv6_ra_mode ,
541+ 'name' : self ._subnet_ipv6_pd .name ,
542+ 'network_id' : self ._subnet_ipv6_pd .network_id ,
543+ 'subnetpool_id' : self ._subnet_ipv6_pd .subnetpool_id ,
544+ }
545+ )
546+ self .assertFalse (self .network_client .set_tags .called )
547+ self .assertEqual (self .columns , columns )
548+ self .assertCountEqual (self .data_ipv6_pd , data )
549+
458550 def test_create_with_network_segment (self ):
459551 # Mock SDK calls for this test.
460552 self ._network .id = self ._subnet .network_id
0 commit comments