Skip to content

Commit d3847e7

Browse files
added delete_gateway and its tests
1 parent 6607451 commit d3847e7

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

chirpstack_api_wrapper/client.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,28 @@ def delete_device_profile(self, device_profile_id:str) -> None:
619619
except grpc.RpcError as e:
620620
return self.refresh_token(e, self.delete_device_profile, device_profile_id)
621621

622+
def delete_gateway(self, gateway_id:str) -> None:
623+
"""
624+
Delete a Gateway.
625+
626+
Params:
627+
- gateway_id (EUI64): Unique identifier for the gateway.
628+
Passing in a Gateway object will also work.
629+
"""
630+
client = api.GatewayServiceStub(self.channel)
631+
632+
# Define the JWT key metadata.
633+
metadata = [("authorization", "Bearer %s" % self.auth_token)]
634+
635+
#Construct request
636+
req = api.DeleteGatewayRequest()
637+
req.gateway_id = str(gateway_id)
638+
639+
try:
640+
return client.Delete(req, metadata=metadata)
641+
except grpc.RpcError as e:
642+
return self.refresh_token(e, self.delete_gateway, gateway_id)
643+
622644
@staticmethod
623645
def List_agg_pagination(client,req,metadata) -> dict:
624646
"""

test/test_chirpstack_client.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1961,6 +1961,67 @@ def test_delete_device_profile_unauthenticated_grpc_error(self, mock_sleep, mock
19611961
# assertations
19621962
self.assertEqual(return_val, None)
19631963

1964+
class TestDeleteGateway(unittest.TestCase):
1965+
1966+
@patch('chirpstack_api_wrapper.api.GatewayServiceStub')
1967+
@patch('chirpstack_api_wrapper.grpc.insecure_channel')
1968+
def test_delete_gateway_happy_path(self, mock_insecure_channel, mock_gw_service_stub):
1969+
"""
1970+
Test delete_gateway() method's happy path
1971+
"""
1972+
1973+
# Mock the gRPC channel and login response
1974+
mock_channel = Mock()
1975+
mock_insecure_channel.return_value = mock_channel
1976+
1977+
# Mock the GatewayServiceStub
1978+
mock_gw_service_stub_instance = mock_gw_service_stub.return_value
1979+
mock_gw_service_stub_instance.Delete.return_value = None
1980+
1981+
# Create a ChirpstackClient instance
1982+
client = ChirpstackClient(CHIRPSTACK_ACT_EMAIL, CHIRPSTACK_ACT_PASSWORD, CHIRPSTACK_API_INTERFACE)
1983+
1984+
# Call method in testing
1985+
return_val = client.delete_gateway("mock id")
1986+
1987+
# Assert the result
1988+
self.assertEqual(return_val, None)
1989+
1990+
1991+
@patch("chirpstack_api_wrapper.api.GatewayServiceStub")
1992+
@patch('chirpstack_api_wrapper.grpc.insecure_channel')
1993+
@patch("chirpstack_api_wrapper.time.sleep", return_value=None) #dont time.sleep() for test case
1994+
def test_delete_gateway_unauthenticated_grpc_error(self, mock_sleep, mock_insecure_channel, mock_gw_service_stub):
1995+
"""
1996+
Test delete_gateway() when grpc error is raised for UNAUTHENTICATED and token needs to be refreshed
1997+
"""
1998+
# Mock the gRPC channel and login response
1999+
mock_channel = Mock()
2000+
mock_insecure_channel.return_value = mock_channel
2001+
2002+
# Mock the method to raise grpc.RpcError()
2003+
mock_rpc_error = grpc.RpcError()
2004+
mock_rpc_error.code = lambda: grpc.StatusCode.UNAUTHENTICATED
2005+
mock_rpc_error.details = lambda: 'ExpiredSignature'
2006+
2007+
# Mock the GatewayServiceStub
2008+
mock_gw_service_stub_instance = mock_gw_service_stub.return_value
2009+
mock_gw_service_stub_instance.Delete.side_effect = mock_rpc_error
2010+
2011+
# Create a ChirpstackClient instance
2012+
client = ChirpstackClient(CHIRPSTACK_ACT_EMAIL, CHIRPSTACK_ACT_PASSWORD, CHIRPSTACK_API_INTERFACE)
2013+
2014+
# Mock the login method to return a dummy token
2015+
with patch.object(client, "login", return_value="dummy_token"):
2016+
2017+
#mock refresh token successfully logging in and retrying the method in testing
2018+
with patch.object(client, "refresh_token", return_value=None):
2019+
# Call the method in testing
2020+
return_val = client.delete_gateway("mock id")
2021+
2022+
# assertations
2023+
self.assertEqual(return_val, None)
2024+
19642025
class TestRefreshToken(unittest.TestCase):
19652026

19662027
@patch("chirpstack_api_wrapper.api.DeviceServiceStub")

0 commit comments

Comments
 (0)