1 /*
2  * Copyright (c) 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 "edm_errors.h"
17 #include "hilog_wrapper.h"
18 #include "ddk_api.h"
19 #include "ddk_types.h"
20 #include "gtest/gtest.h"
21 
22 using namespace testing::ext;
23 
24 #define PARAM_0 0
25 #define BUFF_LENTH 10
26 #define PORT_READ 0x01
27 #define PORT_WRITE 0x02
28 #define PORT_ILLEGAL 0x08
29 
30 namespace OHOS {
31 namespace ExternalDeviceManager {
32 
33 class DdkBaseTest : public testing::Test {
34 public:
SetUp()35     void SetUp() override
36     {
37         EDM_LOGD(MODULE_BASE_DDK, "DdkBaseTest SetUp");
38     }
TearDown()39     void TearDown() override
40     {
41         EDM_LOGD(MODULE_BASE_DDK, "DdkBaseTest TearDown");
42     }
43 };
44 
45 HWTEST_F(DdkBaseTest, OH_DDK_CreateAshmem_001, TestSize.Level1)
46 {
47     DDK_Ashmem *ashmem = nullptr;
48     const uint8_t name[100] = "TestAshmem";
49     int32_t bufferLen = BUFF_LENTH;
50     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
51     EXPECT_EQ(ret, 0);
52 }
53 
54 HWTEST_F(DdkBaseTest, OH_DDK_CreateAshmem_002, TestSize.Level1)
55 {
56     DDK_Ashmem *ashmem = nullptr;
57     const uint8_t name[100] = "TestAshmem";
58     uint32_t bufferLen = PARAM_0;
59     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
60     EXPECT_EQ(ret, DDK_INVALID_PARAMETER);
61 }
62 
63 HWTEST_F(DdkBaseTest, OH_DDK_CreateAshmem_003, TestSize.Level1)
64 {
65     DDK_Ashmem *ashmem = nullptr;
66     const uint8_t *name = nullptr;
67     uint32_t bufferLen = BUFF_LENTH;
68     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
69     EXPECT_EQ(ret, DDK_INVALID_PARAMETER);
70 }
71 
72 HWTEST_F(DdkBaseTest, OH_DDK_MapAshmem_001, TestSize.Level1)
73 {
74     DDK_Ashmem *ashmem = nullptr;
75     const uint8_t name[100] = "TestAshmem";
76     uint32_t bufferLen = BUFF_LENTH;
77     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
78     EXPECT_EQ(ret, DDK_SUCCESS);
79     const uint8_t ashmemMapType = PORT_READ | PORT_WRITE;
80     ret = OH_DDK_MapAshmem(ashmem, ashmemMapType);
81     EXPECT_EQ(ret, DDK_SUCCESS);
82 }
83 
84 HWTEST_F(DdkBaseTest, OH_DDK_MapAshmem_002, TestSize.Level1)
85 {
86     const uint8_t ashmemMapType = PORT_READ | PORT_WRITE;
87     auto ret = OH_DDK_MapAshmem(nullptr, ashmemMapType);
88     EXPECT_EQ(ret, DDK_NULL_PTR);
89 }
90 
91 HWTEST_F(DdkBaseTest, OH_DDK_MapAshmem_003, TestSize.Level1)
92 {
93     DDK_Ashmem *ashmem = nullptr;
94     const uint8_t name[100] = "TestAshmem";
95     uint32_t bufferLen = BUFF_LENTH;
96     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
97     EXPECT_EQ(ret, DDK_SUCCESS);
98     const uint8_t ashmemMapType = PORT_READ | PORT_WRITE;
99     ashmem->ashmemFd = 0;
100     ret = OH_DDK_MapAshmem(ashmem, ashmemMapType);
101     EXPECT_EQ(ret, DDK_FAILURE);
102 }
103 
104 HWTEST_F(DdkBaseTest, OH_DDK_MapAshmem_004, TestSize.Level1)
105 {
106     DDK_Ashmem *ashmem = nullptr;
107     const uint8_t name[100] = "TestAshmem";
108     uint32_t bufferLen = BUFF_LENTH;
109     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
110     EXPECT_EQ(ret, DDK_SUCCESS);
111     const uint8_t ashmemMapType = PORT_ILLEGAL;
112     ret = OH_DDK_MapAshmem(ashmem, ashmemMapType);
113     EXPECT_EQ(ret, DDK_INVALID_OPERATION);
114 }
115 
116 HWTEST_F(DdkBaseTest, OH_DDK_UnMapAshmem_001, TestSize.Level1)
117 {
118     DDK_Ashmem *ashmem = nullptr;
119     const uint8_t name[100] = "TestAshmem";
120     uint32_t bufferLen = BUFF_LENTH;
121     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
122     EXPECT_EQ(ret, DDK_SUCCESS);
123     const uint8_t ashmemMapType = PORT_READ | PORT_WRITE;
124     ret = OH_DDK_MapAshmem(ashmem, ashmemMapType);
125     EXPECT_EQ(ret, DDK_SUCCESS);
126     ret = OH_DDK_UnmapAshmem(ashmem);
127     EXPECT_EQ(ret, DDK_SUCCESS);
128 }
129 
130 HWTEST_F(DdkBaseTest, OH_DDK_UnMapAshmem_002, TestSize.Level1)
131 {
132     DDK_Ashmem *ashmem = nullptr;
133     const uint8_t name[100] = "TestAshmem";
134     uint32_t bufferLen = BUFF_LENTH;
135     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
136     EXPECT_EQ(ret, DDK_SUCCESS);
137     const uint8_t ashmemMapType = PORT_READ | PORT_WRITE;
138     ret = OH_DDK_MapAshmem(ashmem, ashmemMapType);
139     EXPECT_EQ(ret, DDK_SUCCESS);
140     ret = OH_DDK_UnmapAshmem(nullptr);
141     EXPECT_EQ(ret, DDK_NULL_PTR);
142 }
143 
144 
145 HWTEST_F(DdkBaseTest, OH_DDK_DestroyAshmem_001, TestSize.Level1)
146 {
147     DDK_Ashmem *ashmem = nullptr;
148     const uint8_t name[100] = "TestAshmem";
149     uint32_t bufferLen = BUFF_LENTH;
150     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
151     EXPECT_EQ(ret, DDK_SUCCESS);
152     const uint8_t ashmemMapType = PORT_READ | PORT_WRITE;
153     ret = OH_DDK_MapAshmem(ashmem, ashmemMapType);
154     EXPECT_EQ(ret, DDK_SUCCESS);
155     ret = OH_DDK_DestroyAshmem(ashmem);
156     EXPECT_EQ(ret, DDK_SUCCESS);
157 }
158 
159 HWTEST_F(DdkBaseTest, OH_DDK_DestroyAshmem_002, TestSize.Level1)
160 {
161     DDK_Ashmem *ashmem = nullptr;
162     const uint8_t name[100] = "TestAshmem";
163     uint32_t bufferLen = BUFF_LENTH;
164     auto ret = OH_DDK_CreateAshmem(name, bufferLen, &ashmem);
165     EXPECT_EQ(ret, DDK_SUCCESS);
166     const uint8_t ashmemMapType = PORT_READ | PORT_WRITE;
167     ret = OH_DDK_MapAshmem(ashmem, ashmemMapType);
168     EXPECT_EQ(ret, DDK_SUCCESS);
169     ret = OH_DDK_DestroyAshmem(nullptr);
170     EXPECT_EQ(ret, DDK_NULL_PTR);
171 }
172 } // ExternalDeviceManager
173 } // OHOS
174