1 /*
2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <ctime>
17 #include <net/if.h>
18 #include <thread>
19 #include <vector>
20
21 #include <gtest/gtest.h>
22 #include <sys/resource.h>
23 #include <unistd.h>
24
25 #ifdef GTEST_API_
26 #define private public
27 #define protected public
28 #endif
29
30 #include "bpf_loader.h"
31 #include "bpf_mapper.h"
32 #include "bpf_path.h"
33 #include "bpf_ring_buffer.h"
34
35 #include "net_stats_constants.h"
36
37 namespace OHOS {
38 namespace NetManagerStandard {
39
40 using namespace testing::ext;
41
42 class NetsysBpfRingBufferTest : public testing::Test {
43 public:
44 static void SetUpTestCase();
45
46 static void TearDownTestCase();
47
48 void SetUp();
49
50 void TearDown();
51
52 protected:
53 NetsysBpfRingBufferTest() = default;
54 };
SetUpTestCase()55 void NetsysBpfRingBufferTest::SetUpTestCase() {}
56
TearDownTestCase()57 void NetsysBpfRingBufferTest::TearDownTestCase() {}
58
SetUp()59 void NetsysBpfRingBufferTest::SetUp() {}
60
TearDown()61 void NetsysBpfRingBufferTest::TearDown() {}
62
63 HWTEST_F(NetsysBpfRingBufferTest, HandleNetworkPolicyEventCallbackTest001, TestSize.Level1)
64 {
65 void *ctx = malloc(100);
66 void *data = malloc(100);
67 size_t dataSize = 1;
68
69 std::unique_ptr<NetsysBpfRingBuffer> bpfringbuffer = std::make_unique<NetsysBpfRingBuffer>();
70 EXPECT_EQ(bpfringbuffer->HandleNetworkPolicyEventCallback(ctx, data, dataSize), 1);
71 data = nullptr;
72 EXPECT_EQ(bpfringbuffer->HandleNetworkPolicyEventCallback(ctx, data, dataSize), 1);
73 }
74
75 HWTEST_F(NetsysBpfRingBufferTest, RegisterNetsysTrafficCallbackTest001, TestSize.Level1)
76 {
77 sptr<NetsysNative::INetsysTrafficCallback> callback;
78 sptr<NetsysNative::INetsysTrafficCallback> callback1 = nullptr;
79
80 std::unique_ptr<NetsysBpfRingBuffer> bpfringbuffer = std::make_unique<NetsysBpfRingBuffer>();
81 EXPECT_EQ(bpfringbuffer->RegisterNetsysTrafficCallback(callback), 0);
82 EXPECT_EQ(bpfringbuffer->RegisterNetsysTrafficCallback(callback1), 0);
83 bpfringbuffer->callbacks_ = {callback, callback, callback, callback, callback, callback, callback,
84 callback, callback, callback, callback, callback, callback, callback,
85 callback, callback, callback, callback, callback, callback, callback};
86 EXPECT_EQ(bpfringbuffer->RegisterNetsysTrafficCallback(callback), 0);
87 }
88
89 HWTEST_F(NetsysBpfRingBufferTest, UnRegisterNetsysTrafficCallbackTest001, TestSize.Level1)
90 {
91 sptr<NetsysNative::INetsysTrafficCallback> callback;
92 sptr<NetsysNative::INetsysTrafficCallback> callback1 = nullptr;
93
94 std::unique_ptr<NetsysBpfRingBuffer> bpfringbuffer = std::make_unique<NetsysBpfRingBuffer>();
95 bpfringbuffer->callbacks_ = {callback, callback1};
96 EXPECT_EQ(bpfringbuffer->UnRegisterNetsysTrafficCallback(callback), 0);
97 }
98
99 HWTEST_F(NetsysBpfRingBufferTest, HandleNetStatsEventCallbackTest001, TestSize.Level1)
100 {
101 void *ctx = malloc(100);
102 void *data = malloc(100);
103 size_t dataSize = 1;
104
105 std::unique_ptr<NetsysBpfRingBuffer> bpfringbuffer = std::make_unique<NetsysBpfRingBuffer>();
106 EXPECT_EQ(bpfringbuffer->HandleNetStatsEventCallback(ctx, data, dataSize), 0);
107 dataSize = 0;
108 EXPECT_EQ(bpfringbuffer->HandleNetStatsEventCallback(ctx, data, dataSize), 1);
109 data = nullptr;
110 dataSize = 1;
111 EXPECT_EQ(bpfringbuffer->HandleNetStatsEventCallback(ctx, data, dataSize), 1);
112 dataSize = 0;
113 EXPECT_EQ(bpfringbuffer->HandleNetStatsEventCallback(ctx, data, dataSize), 1);
114 }
115
116 HWTEST_F(NetsysBpfRingBufferTest, ListenNetStatsRingBufferThreadTest001, TestSize.Level1)
117 {
118 std::unique_ptr<NetsysBpfRingBuffer> bpfringbuffer = std::make_unique<NetsysBpfRingBuffer>();
119 bpfringbuffer->existNetStatsThread_ = false;
120 bpfringbuffer->ListenNetStatsRingBufferThread();
121 EXPECT_NE(bpfringbuffer, nullptr);
122 }
123 } // namespace NetManagerStandard
124 } // namespace OHOS