Skip to content

Commit

Permalink
chore(mme): add unit test for fillIpv4
Browse files Browse the repository at this point in the history
Signed-off-by: Lars Kreutzer <lars.kreutzer@tngtech.com>
  • Loading branch information
LKreutzer committed Mar 14, 2022
1 parent d825d3d commit f5279dc
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 10 deletions.
18 changes: 9 additions & 9 deletions lte/gateway/c/core/oai/tasks/grpc_service/SpgwServiceImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,15 @@ class SpgwServiceImpl final : public SpgwService::Service {

ipv4_network_t parseIpv4Network(const std::string& ipv4network_str);

/*
* Fill up the ipv4 remote address field in packet filter
* @param pf_content: packet filter object to be filled
* @param ipv4addr: IPv4 address in string form (e.g, "172.12.0.1")
* @return bool: Return true if successful, false if not
*/
bool fillIpv4(packet_filter_contents_t* pf_content,
const std::string& ipv4addr);

private:
/*
* Fill up the packet filter contents such as flags and flow tuple fields
Expand All @@ -97,15 +106,6 @@ class SpgwServiceImpl final : public SpgwService::Service {
bool fillUpPacketFilterContents(packet_filter_contents_t* pf_content,
const FlowMatch* flow_match_rule);

/*
* Fill up the ipv4 remote address field in packet filter
* @param pf_content: packet filter object to be filled
* @param ipv4addr: IPv4 address in string form (e.g, "172.12.0.1")
* @return bool: Return true if successful, false if not
*/
bool fillIpv4(packet_filter_contents_t* pf_content,
const std::string& ipv4addr);

/*
* Fill up the ipv6 remote address field in packet filter
* @param pf_content: packet filter object to be filled
Expand Down
56 changes: 55 additions & 1 deletion lte/gateway/c/core/oai/test/spgw_task/test_spgw_service_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,20 @@ class SPGWServiceImplTest : public ::testing::Test {
virtual void SetUp() {}

virtual void TearDown() {}

protected:
void CheckFillIpv4(packet_filter_contents_t* pf_content, int exp_addr[],
int exp_mask[]) {
for (int i = 0; i < TRAFFIC_FLOW_TEMPLATE_IPV4_ADDR_SIZE; i++) {
EXPECT_EQ(pf_content->ipv4remoteaddr[i].mask, exp_mask[i]);
EXPECT_EQ(pf_content->ipv4remoteaddr[i].addr, exp_addr[i]);
pf_content->ipv4remoteaddr[i].mask = (uint8_t)256; // reset mask
pf_content->ipv4remoteaddr[i].addr = (uint8_t)256; // reset addr
}
}
};

TEST_F(SPGWServiceImplTest, TestSpgwServiceImpl) {
TEST_F(SPGWServiceImplTest, TestParseIpv4Network) {
SpgwServiceImpl test_service;

// parseIpv4Network calls with valid ip and optional valid subnet masks
Expand Down Expand Up @@ -73,6 +84,49 @@ TEST_F(SPGWServiceImplTest, TestSpgwServiceImpl) {
}
}

TEST_F(SPGWServiceImplTest, TestFillIpv4) {
SpgwServiceImpl test_service;
packet_filter_contents_t pf_content;

// Input "192.168.32.118/8", expected output 192.0.0.0 and 255.0.0.0.
bool return_val = test_service.fillIpv4(&pf_content, "192.168.32.118/8");
EXPECT_TRUE(return_val);
CheckFillIpv4(&pf_content, std::array<int, 4>{192, 0, 0, 0}.data(),
std::array<int, 4>{255, 0, 0, 0}.data());

// Input "192.168.32.118/16", expected output 192.168.0.0 and 255.255.0.0.
return_val = test_service.fillIpv4(&pf_content, "192.168.32.118/16");
EXPECT_TRUE(return_val);
CheckFillIpv4(&pf_content, std::array<int, 4>{192, 168, 0, 0}.data(),
std::array<int, 4>{255, 255, 0, 0}.data());

// Input "192.168.32.118/17", expected output 192.168.0.0 and 255.255.128.0.
return_val = test_service.fillIpv4(&pf_content, "192.168.32.118/17");
EXPECT_TRUE(return_val);
CheckFillIpv4(&pf_content, std::array<int, 4>{192, 168, 0, 0}.data(),
std::array<int, 4>{255, 255, 128, 0}.data());

// Input "192.168.32.118/24", expected output 192.168.32.0 and 255.255.255.0.
return_val = test_service.fillIpv4(&pf_content, "192.168.32.118/24");
EXPECT_TRUE(return_val);
CheckFillIpv4(&pf_content, std::array<int, 4>{192, 168, 32, 0}.data(),
std::array<int, 4>{255, 255, 255, 0}.data());

// Input "192.168.32.118/26", expected output 192.168.32.64 and
// 255.255.255.192.
return_val = test_service.fillIpv4(&pf_content, "192.168.32.118/26");
EXPECT_TRUE(return_val);
CheckFillIpv4(&pf_content, std::array<int, 4>{192, 168, 32, 64}.data(),
std::array<int, 4>{255, 255, 255, 192}.data());

// Input "192.168.32.118/32", expected output 192.168.32.118 and
// 255.255.255.255.
return_val = test_service.fillIpv4(&pf_content, "192.168.32.118/32");
EXPECT_TRUE(return_val);
CheckFillIpv4(&pf_content, std::array<int, 4>{192, 168, 32, 118}.data(),
std::array<int, 4>{255, 255, 255, 255}.data());
}

int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
Expand Down

0 comments on commit f5279dc

Please sign in to comment.