@@ -561,17 +561,19 @@ class TestSetRouter(TestRouter):
561561
562562 # The router to set.
563563 _default_route = {'destination' : '10.20.20.0/24' , 'nexthop' : '10.20.30.1' }
564+ _network = network_fakes .FakeNetwork .create_one_network ()
565+ _subnet = network_fakes .FakeSubnet .create_one_subnet ()
564566 _router = network_fakes .FakeRouter .create_one_router (
565567 attrs = {'routes' : [_default_route ]}
566568 )
567569
568570 def setUp (self ):
569571 super (TestSetRouter , self ).setUp ()
570-
572+ self . network . router_add_gateway = mock . Mock ()
571573 self .network .update_router = mock .Mock (return_value = None )
572-
573574 self .network .find_router = mock .Mock (return_value = self ._router )
574-
575+ self .network .find_network = mock .Mock (return_value = self ._network )
576+ self .network .find_subnet = mock .Mock (return_value = self ._subnet )
575577 # Get the command object to test
576578 self .cmd = router .SetRouter (self .app , self .namespace )
577579
@@ -758,6 +760,110 @@ def test_set_nothing(self):
758760 self ._router , ** attrs )
759761 self .assertIsNone (result )
760762
763+ def test_wrong_gateway_params (self ):
764+ arglist = [
765+ "--fixed-ip" , "subnet='abc'" ,
766+ self ._router .id ,
767+ ]
768+ verifylist = [
769+ ('fixed_ip' , [{'subnet' : "'abc'" }]),
770+ ('router' , self ._router .id ),
771+ ]
772+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
773+ self .assertRaises (exceptions .CommandError ,
774+ self .cmd .take_action , parsed_args )
775+
776+ def test_set_gateway_network_only (self ):
777+ arglist = [
778+ "--external-gateway" , self ._network .id ,
779+ self ._router .id ,
780+ ]
781+ verifylist = [
782+ ('external_gateway' , self ._network .id ),
783+ ('router' , self ._router .id ),
784+ ]
785+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
786+
787+ result = self .cmd .take_action (parsed_args )
788+ self .network .update_router .assert_called_with (
789+ self ._router , ** {'external_gateway_info' : {
790+ 'network_id' : self ._network .id }})
791+ self .assertIsNone (result )
792+
793+ def test_set_gateway_options_subnet_only (self ):
794+ arglist = [
795+ "--external-gateway" , self ._network .id ,
796+ "--fixed-ip" , "subnet='abc'" ,
797+ self ._router .id ,
798+ '--enable-snat' ,
799+ ]
800+ verifylist = [
801+ ('router' , self ._router .id ),
802+ ('external_gateway' , self ._network .id ),
803+ ('fixed_ip' , [{'subnet' : "'abc'" }]),
804+ ('enable_snat' , True ),
805+ ]
806+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
807+
808+ result = self .cmd .take_action (parsed_args )
809+ self .network .update_router .assert_called_with (
810+ self ._router , ** {'external_gateway_info' : {
811+ 'network_id' : self ._network .id ,
812+ 'external_fixed_ips' : [{
813+ 'subnet_id' : self ._subnet .id , }],
814+ 'enable_snat' : True , }})
815+ self .assertIsNone (result )
816+
817+ def test_set_gateway_option_ipaddress_only (self ):
818+ arglist = [
819+ "--external-gateway" , self ._network .id ,
820+ "--fixed-ip" , "ip-address=10.0.1.1" ,
821+ self ._router .id ,
822+ '--enable-snat' ,
823+ ]
824+ verifylist = [
825+ ('router' , self ._router .id ),
826+ ('external_gateway' , self ._network .id ),
827+ ('fixed_ip' , [{'ip-address' : "10.0.1.1" }]),
828+ ('enable_snat' , True ),
829+ ]
830+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
831+
832+ result = self .cmd .take_action (parsed_args )
833+ self .network .update_router .assert_called_with (
834+ self ._router , ** {'external_gateway_info' : {
835+ 'network_id' : self ._network .id ,
836+ 'external_fixed_ips' : [{
837+ 'ip_address' : "10.0.1.1" , }],
838+ 'enable_snat' : True , }})
839+ self .assertIsNone (result )
840+
841+ def test_set_gateway_options_subnet_ipaddress (self ):
842+ arglist = [
843+ "--external-gateway" , self ._network .id ,
844+ "--fixed-ip" , "subnet='abc',ip-address=10.0.1.1" ,
845+ self ._router .id ,
846+ '--enable-snat' ,
847+ ]
848+ verifylist = [
849+ ('router' , self ._router .id ),
850+ ('external_gateway' , self ._network .id ),
851+ ('fixed_ip' , [{'subnet' : "'abc'" ,
852+ 'ip-address' : "10.0.1.1" }]),
853+ ('enable_snat' , True ),
854+ ]
855+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
856+
857+ result = self .cmd .take_action (parsed_args )
858+ self .network .update_router .assert_called_with (
859+ self ._router , ** {'external_gateway_info' : {
860+ 'network_id' : self ._network .id ,
861+ 'external_fixed_ips' : [{
862+ 'subnet_id' : self ._subnet .id ,
863+ 'ip_address' : "10.0.1.1" , }],
864+ 'enable_snat' : True , }})
865+ self .assertIsNone (result )
866+
761867
762868class TestShowRouter (TestRouter ):
763869
0 commit comments