@@ -602,17 +602,19 @@ class TestSetRouter(TestRouter):
602602
603603 # The router to set.
604604 _default_route = {'destination' : '10.20.20.0/24' , 'nexthop' : '10.20.30.1' }
605+ _network = network_fakes .FakeNetwork .create_one_network ()
606+ _subnet = network_fakes .FakeSubnet .create_one_subnet ()
605607 _router = network_fakes .FakeRouter .create_one_router (
606608 attrs = {'routes' : [_default_route ]}
607609 )
608610
609611 def setUp (self ):
610612 super (TestSetRouter , self ).setUp ()
611-
613+ self . network . router_add_gateway = mock . Mock ()
612614 self .network .update_router = mock .Mock (return_value = None )
613-
614615 self .network .find_router = mock .Mock (return_value = self ._router )
615-
616+ self .network .find_network = mock .Mock (return_value = self ._network )
617+ self .network .find_subnet = mock .Mock (return_value = self ._subnet )
616618 # Get the command object to test
617619 self .cmd = router .SetRouter (self .app , self .namespace )
618620
@@ -799,6 +801,110 @@ def test_set_nothing(self):
799801 self ._router , ** attrs )
800802 self .assertIsNone (result )
801803
804+ def test_wrong_gateway_params (self ):
805+ arglist = [
806+ "--fixed-ip" , "subnet='abc'" ,
807+ self ._router .id ,
808+ ]
809+ verifylist = [
810+ ('fixed_ip' , [{'subnet' : "'abc'" }]),
811+ ('router' , self ._router .id ),
812+ ]
813+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
814+ self .assertRaises (exceptions .CommandError ,
815+ self .cmd .take_action , parsed_args )
816+
817+ def test_set_gateway_network_only (self ):
818+ arglist = [
819+ "--external-gateway" , self ._network .id ,
820+ self ._router .id ,
821+ ]
822+ verifylist = [
823+ ('external_gateway' , self ._network .id ),
824+ ('router' , self ._router .id ),
825+ ]
826+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
827+
828+ result = self .cmd .take_action (parsed_args )
829+ self .network .update_router .assert_called_with (
830+ self ._router , ** {'external_gateway_info' : {
831+ 'network_id' : self ._network .id }})
832+ self .assertIsNone (result )
833+
834+ def test_set_gateway_options_subnet_only (self ):
835+ arglist = [
836+ "--external-gateway" , self ._network .id ,
837+ "--fixed-ip" , "subnet='abc'" ,
838+ self ._router .id ,
839+ '--enable-snat' ,
840+ ]
841+ verifylist = [
842+ ('router' , self ._router .id ),
843+ ('external_gateway' , self ._network .id ),
844+ ('fixed_ip' , [{'subnet' : "'abc'" }]),
845+ ('enable_snat' , True ),
846+ ]
847+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
848+
849+ result = self .cmd .take_action (parsed_args )
850+ self .network .update_router .assert_called_with (
851+ self ._router , ** {'external_gateway_info' : {
852+ 'network_id' : self ._network .id ,
853+ 'external_fixed_ips' : [{
854+ 'subnet_id' : self ._subnet .id , }],
855+ 'enable_snat' : True , }})
856+ self .assertIsNone (result )
857+
858+ def test_set_gateway_option_ipaddress_only (self ):
859+ arglist = [
860+ "--external-gateway" , self ._network .id ,
861+ "--fixed-ip" , "ip-address=10.0.1.1" ,
862+ self ._router .id ,
863+ '--enable-snat' ,
864+ ]
865+ verifylist = [
866+ ('router' , self ._router .id ),
867+ ('external_gateway' , self ._network .id ),
868+ ('fixed_ip' , [{'ip-address' : "10.0.1.1" }]),
869+ ('enable_snat' , True ),
870+ ]
871+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
872+
873+ result = self .cmd .take_action (parsed_args )
874+ self .network .update_router .assert_called_with (
875+ self ._router , ** {'external_gateway_info' : {
876+ 'network_id' : self ._network .id ,
877+ 'external_fixed_ips' : [{
878+ 'ip_address' : "10.0.1.1" , }],
879+ 'enable_snat' : True , }})
880+ self .assertIsNone (result )
881+
882+ def test_set_gateway_options_subnet_ipaddress (self ):
883+ arglist = [
884+ "--external-gateway" , self ._network .id ,
885+ "--fixed-ip" , "subnet='abc',ip-address=10.0.1.1" ,
886+ self ._router .id ,
887+ '--enable-snat' ,
888+ ]
889+ verifylist = [
890+ ('router' , self ._router .id ),
891+ ('external_gateway' , self ._network .id ),
892+ ('fixed_ip' , [{'subnet' : "'abc'" ,
893+ 'ip-address' : "10.0.1.1" }]),
894+ ('enable_snat' , True ),
895+ ]
896+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
897+
898+ result = self .cmd .take_action (parsed_args )
899+ self .network .update_router .assert_called_with (
900+ self ._router , ** {'external_gateway_info' : {
901+ 'network_id' : self ._network .id ,
902+ 'external_fixed_ips' : [{
903+ 'subnet_id' : self ._subnet .id ,
904+ 'ip_address' : "10.0.1.1" , }],
905+ 'enable_snat' : True , }})
906+ self .assertIsNone (result )
907+
802908
803909class TestShowRouter (TestRouter ):
804910
0 commit comments