user.cpp 8.1 KB
Newer Older
S
Shengliang Guan 已提交
1
/**
S
Shengliang Guan 已提交
2
 * @file user.cpp
S
Shengliang Guan 已提交
3
 * @author slguan (slguan@taosdata.com)
S
Shengliang Guan 已提交
4 5
 * @brief MNODE module user tests
 * @version 1.0
S
Shengliang Guan 已提交
6
 * @date 2022-01-04
S
Shengliang Guan 已提交
7
 *
S
Shengliang Guan 已提交
8
 * @copyright Copyright (c) 2022
S
Shengliang Guan 已提交
9 10 11
 *
 */

S
Shengliang Guan 已提交
12
#include "sut.h"
S
Shengliang Guan 已提交
13

S
Shengliang Guan 已提交
14
class MndTestUser : public ::testing::Test {
S
Shengliang Guan 已提交
15
 protected:
S
Shengliang Guan 已提交
16
  static void SetUpTestSuite() { test.Init("/tmp/mnode_test_user", 9011); }
S
Shengliang Guan 已提交
17
  static void TearDownTestSuite() { test.Cleanup(); }
S
Shengliang Guan 已提交
18

S
Shengliang Guan 已提交
19
  static Testbase test;
S
Shengliang Guan 已提交
20

S
Shengliang Guan 已提交
21 22 23 24 25
 public:
  void SetUp() override {}
  void TearDown() override {}
};

S
Shengliang Guan 已提交
26
Testbase MndTestUser::test;
S
Shengliang Guan 已提交
27

S
Shengliang Guan 已提交
28
TEST_F(MndTestUser, 01_Show_User) {
S
Shengliang Guan 已提交
29
  test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
S
Shengliang Guan 已提交
30 31 32 33 34 35 36
  CHECK_META("show users", 4);

  CHECK_SCHEMA(0, TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN + VARSTR_HEADER_SIZE, "name");
  CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, 10 + VARSTR_HEADER_SIZE, "privilege");
  CHECK_SCHEMA(2, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
  CHECK_SCHEMA(3, TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN + VARSTR_HEADER_SIZE, "account");

S
Shengliang Guan 已提交
37
  test.SendShowRetrieveReq();
S
Shengliang Guan 已提交
38
  EXPECT_EQ(test.GetShowRows(), 1);
S
Shengliang Guan 已提交
39 40 41 42 43

  CheckBinary("root", TSDB_USER_LEN);
  CheckBinary("super", 10);
  CheckTimestamp();
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
44 45
}

S
Shengliang Guan 已提交
46
TEST_F(MndTestUser, 02_Create_User) {
S
Shengliang Guan 已提交
47
  {
S
Shengliang Guan 已提交
48
    int32_t contLen = sizeof(SCreateUserReq);
S
Shengliang Guan 已提交
49

S
Shengliang Guan 已提交
50
    SCreateUserReq* pReq = (SCreateUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
51 52 53
    strcpy(pReq->user, "");
    strcpy(pReq->pass, "p1");

S
Shengliang Guan 已提交
54 55 56
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, TSDB_CODE_MND_INVALID_USER_FORMAT);
S
Shengliang Guan 已提交
57 58 59
  }

  {
S
Shengliang Guan 已提交
60
    int32_t contLen = sizeof(SCreateUserReq);
S
Shengliang Guan 已提交
61

S
Shengliang Guan 已提交
62
    SCreateUserReq* pReq = (SCreateUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
63 64 65
    strcpy(pReq->user, "u1");
    strcpy(pReq->pass, "");

S
Shengliang Guan 已提交
66 67 68
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, TSDB_CODE_MND_INVALID_PASS_FORMAT);
S
Shengliang Guan 已提交
69 70 71
  }

  {
S
Shengliang Guan 已提交
72
    int32_t contLen = sizeof(SCreateUserReq);
S
Shengliang Guan 已提交
73

S
Shengliang Guan 已提交
74
    SCreateUserReq* pReq = (SCreateUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
75 76 77
    strcpy(pReq->user, "root");
    strcpy(pReq->pass, "1");

S
Shengliang Guan 已提交
78 79 80
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, TSDB_CODE_MND_USER_ALREADY_EXIST);
S
Shengliang Guan 已提交
81 82 83
  }

  {
S
Shengliang Guan 已提交
84
    int32_t contLen = sizeof(SCreateUserReq);
S
Shengliang Guan 已提交
85

S
Shengliang Guan 已提交
86
    SCreateUserReq* pReq = (SCreateUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
87 88 89
    strcpy(pReq->user, "u1");
    strcpy(pReq->pass, "p1");

S
Shengliang Guan 已提交
90 91 92
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, 0);
S
Shengliang Guan 已提交
93 94
  }

S
Shengliang Guan 已提交
95
  test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
S
Shengliang Guan 已提交
96 97
  CHECK_META("show users", 4);

S
Shengliang Guan 已提交
98
  test.SendShowRetrieveReq();
S
Shengliang Guan 已提交
99 100 101
  EXPECT_EQ(test.GetShowRows(), 2);
}

S
Shengliang Guan 已提交
102
TEST_F(MndTestUser, 03_Alter_User) {
S
Shengliang Guan 已提交
103
  {
S
Shengliang Guan 已提交
104
    int32_t contLen = sizeof(SAlterUserReq);
S
Shengliang Guan 已提交
105

S
Shengliang Guan 已提交
106
    SAlterUserReq* pReq = (SAlterUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
107 108 109
    strcpy(pReq->user, "");
    strcpy(pReq->pass, "p1");

S
Shengliang Guan 已提交
110 111 112
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, TSDB_CODE_MND_INVALID_USER_FORMAT);
S
Shengliang Guan 已提交
113 114 115
  }

  {
S
Shengliang Guan 已提交
116
    int32_t contLen = sizeof(SAlterUserReq);
S
Shengliang Guan 已提交
117

S
Shengliang Guan 已提交
118
    SAlterUserReq* pReq = (SAlterUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
119 120 121
    strcpy(pReq->user, "u1");
    strcpy(pReq->pass, "");

S
Shengliang Guan 已提交
122 123 124
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, TSDB_CODE_MND_INVALID_PASS_FORMAT);
S
Shengliang Guan 已提交
125 126 127
  }

  {
S
Shengliang Guan 已提交
128
    int32_t contLen = sizeof(SAlterUserReq);
S
Shengliang Guan 已提交
129

S
Shengliang Guan 已提交
130
    SAlterUserReq* pReq = (SAlterUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
131 132 133
    strcpy(pReq->user, "u4");
    strcpy(pReq->pass, "1");

S
Shengliang Guan 已提交
134 135 136
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, TSDB_CODE_MND_USER_NOT_EXIST);
S
Shengliang Guan 已提交
137 138 139
  }

  {
S
Shengliang Guan 已提交
140
    int32_t contLen = sizeof(SAlterUserReq);
S
Shengliang Guan 已提交
141

S
Shengliang Guan 已提交
142
    SAlterUserReq* pReq = (SAlterUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
143 144 145
    strcpy(pReq->user, "u1");
    strcpy(pReq->pass, "1");

S
Shengliang Guan 已提交
146 147 148
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, 0);
S
Shengliang Guan 已提交
149 150 151
  }
}

S
Shengliang Guan 已提交
152
TEST_F(MndTestUser, 04_Drop_User) {
S
Shengliang Guan 已提交
153
  {
S
Shengliang Guan 已提交
154
    int32_t contLen = sizeof(SDropUserReq);
S
Shengliang Guan 已提交
155

S
Shengliang Guan 已提交
156
    SDropUserReq* pReq = (SDropUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
157 158
    strcpy(pReq->user, "");

S
Shengliang Guan 已提交
159 160 161
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, TSDB_CODE_MND_INVALID_USER_FORMAT);
S
Shengliang Guan 已提交
162 163 164
  }

  {
S
Shengliang Guan 已提交
165
    int32_t contLen = sizeof(SDropUserReq);
S
Shengliang Guan 已提交
166

S
Shengliang Guan 已提交
167
    SDropUserReq* pReq = (SDropUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
168 169
    strcpy(pReq->user, "u4");

S
Shengliang Guan 已提交
170 171 172
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, TSDB_CODE_MND_USER_NOT_EXIST);
S
Shengliang Guan 已提交
173 174 175
  }

  {
S
Shengliang Guan 已提交
176
    int32_t contLen = sizeof(SDropUserReq);
S
Shengliang Guan 已提交
177

S
Shengliang Guan 已提交
178
    SDropUserReq* pReq = (SDropUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
179 180
    strcpy(pReq->user, "u1");

S
Shengliang Guan 已提交
181 182 183
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, 0);
S
Shengliang Guan 已提交
184 185
  }

S
Shengliang Guan 已提交
186
  test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
S
Shengliang Guan 已提交
187 188
  CHECK_META("show users", 4);

S
Shengliang Guan 已提交
189
  test.SendShowRetrieveReq();
S
Shengliang Guan 已提交
190 191 192
  EXPECT_EQ(test.GetShowRows(), 1);
}

S
Shengliang Guan 已提交
193
TEST_F(MndTestUser, 05_Create_Drop_Alter_User) {
S
Shengliang Guan 已提交
194
  {
S
Shengliang Guan 已提交
195
    int32_t contLen = sizeof(SCreateUserReq);
S
Shengliang Guan 已提交
196

S
Shengliang Guan 已提交
197
    SCreateUserReq* pReq = (SCreateUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
198 199 200
    strcpy(pReq->user, "u1");
    strcpy(pReq->pass, "p1");

S
Shengliang Guan 已提交
201 202 203
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, 0);
S
Shengliang Guan 已提交
204
  }
S
Shengliang Guan 已提交
205

S
Shengliang Guan 已提交
206
  {
S
Shengliang Guan 已提交
207
    int32_t contLen = sizeof(SCreateUserReq);
S
Shengliang Guan 已提交
208

S
Shengliang Guan 已提交
209
    SCreateUserReq* pReq = (SCreateUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
210 211
    strcpy(pReq->user, "u2");
    strcpy(pReq->pass, "p2");
S
Shengliang Guan 已提交
212

S
Shengliang Guan 已提交
213 214 215
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, 0);
S
Shengliang Guan 已提交
216
  }
S
Shengliang Guan 已提交
217

S
Shengliang Guan 已提交
218
  test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
S
Shengliang Guan 已提交
219 220
  CHECK_META("show users", 4);

S
Shengliang Guan 已提交
221
  test.SendShowRetrieveReq();
S
Shengliang Guan 已提交
222 223
  EXPECT_EQ(test.GetShowRows(), 3);

S
Shengliang Guan 已提交
224 225
  CheckBinary("u1", TSDB_USER_LEN);
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
226
  CheckBinary("u2", TSDB_USER_LEN);
S
Shengliang Guan 已提交
227 228
  CheckBinary("normal", 10);
  CheckBinary("super", 10);
S
Shengliang Guan 已提交
229 230
  CheckBinary("normal", 10);
  CheckTimestamp();
S
Shengliang Guan 已提交
231 232 233 234
  CheckTimestamp();
  CheckTimestamp();
  CheckBinary("root", TSDB_USER_LEN);
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
235
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
236

S
Shengliang Guan 已提交
237
  {
S
Shengliang Guan 已提交
238
    int32_t contLen = sizeof(SAlterUserReq);
S
Shengliang Guan 已提交
239

S
Shengliang Guan 已提交
240
    SAlterUserReq* pReq = (SAlterUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
241 242
    strcpy(pReq->user, "u1");
    strcpy(pReq->pass, "p2");
S
Shengliang Guan 已提交
243

S
Shengliang Guan 已提交
244 245 246
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, 0);
S
Shengliang Guan 已提交
247
  }
S
Shengliang Guan 已提交
248

S
Shengliang Guan 已提交
249
  test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
S
Shengliang Guan 已提交
250 251
  CHECK_META("show users", 4);

S
Shengliang Guan 已提交
252
  test.SendShowRetrieveReq();
S
Shengliang Guan 已提交
253 254
  EXPECT_EQ(test.GetShowRows(), 3);

S
Shengliang Guan 已提交
255 256
  CheckBinary("u1", TSDB_USER_LEN);
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
257
  CheckBinary("u2", TSDB_USER_LEN);
S
Shengliang Guan 已提交
258 259
  CheckBinary("normal", 10);
  CheckBinary("super", 10);
S
Shengliang Guan 已提交
260 261
  CheckBinary("normal", 10);
  CheckTimestamp();
S
Shengliang Guan 已提交
262 263 264 265
  CheckTimestamp();
  CheckTimestamp();
  CheckBinary("root", TSDB_USER_LEN);
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
266
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
267

S
Shengliang Guan 已提交
268
  {
S
Shengliang Guan 已提交
269
    int32_t contLen = sizeof(SDropUserReq);
S
Shengliang Guan 已提交
270

S
Shengliang Guan 已提交
271
    SDropUserReq* pReq = (SDropUserReq*)rpcMallocCont(contLen);
S
Shengliang Guan 已提交
272
    strcpy(pReq->user, "u1");
S
Shengliang Guan 已提交
273

S
Shengliang Guan 已提交
274 275 276
    SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_USER, pReq, contLen);
    ASSERT_NE(pRsp, nullptr);
    ASSERT_EQ(pRsp->code, 0);
S
Shengliang Guan 已提交
277
  }
S
Shengliang Guan 已提交
278

S
Shengliang Guan 已提交
279
  test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
S
Shengliang Guan 已提交
280 281
  CHECK_META("show users", 4);

S
Shengliang Guan 已提交
282
  test.SendShowRetrieveReq();
S
Shengliang Guan 已提交
283 284
  EXPECT_EQ(test.GetShowRows(), 2);

S
Shengliang Guan 已提交
285
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
286
  CheckBinary("u2", TSDB_USER_LEN);
S
Shengliang Guan 已提交
287
  CheckBinary("super", 10);
S
Shengliang Guan 已提交
288 289
  CheckBinary("normal", 10);
  CheckTimestamp();
S
Shengliang Guan 已提交
290 291
  CheckTimestamp();
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
292 293
  CheckBinary("root", TSDB_USER_LEN);

S
Shengliang Guan 已提交
294
  // restart
S
Shengliang Guan 已提交
295
  test.Restart();
S
Shengliang Guan 已提交
296

S
Shengliang Guan 已提交
297
  test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
S
Shengliang Guan 已提交
298
  CHECK_META("show users", 4);
S
Shengliang Guan 已提交
299

S
Shengliang Guan 已提交
300
  test.SendShowRetrieveReq();
S
Shengliang Guan 已提交
301
  EXPECT_EQ(test.GetShowRows(), 2);
S
Shengliang Guan 已提交
302 303 304 305 306 307 308 309 310

  CheckBinary("root", TSDB_USER_LEN);
  CheckBinary("u2", TSDB_USER_LEN);
  CheckBinary("super", 10);
  CheckBinary("normal", 10);
  CheckTimestamp();
  CheckTimestamp();
  CheckBinary("root", TSDB_USER_LEN);
  CheckBinary("root", TSDB_USER_LEN);
S
Shengliang Guan 已提交
311
}