@@ -40,12 +40,14 @@ gen_test_user (void)
40
40
41
41
42
42
static char *
43
- gen_good_uri (const char * username )
43
+ gen_good_uri (const char * username ,
44
+ const char * dbname )
44
45
{
45
46
char * host = test_framework_get_host ();
46
- char * uri = bson_strdup_printf ("mongodb://%s:testpass@%s/test " ,
47
+ char * uri = bson_strdup_printf ("mongodb://%s:testpass@%s/%s " ,
47
48
username ,
48
- host );
49
+ host ,
50
+ dbname );
49
51
50
52
bson_free (host );
51
53
return uri ;
@@ -55,28 +57,58 @@ gen_good_uri (const char *username)
55
57
static void
56
58
test_mongoc_client_authenticate (void )
57
59
{
58
- mongoc_collection_t * collection ;
60
+ char * admin_username ;
61
+ mongoc_client_t * admin_client ;
62
+ mongoc_database_t * admin_database ;
63
+ bson_t admin_roles ;
64
+ char * admin_uri ;
65
+ char * username ;
66
+ char * uri ;
67
+ bson_t roles ;
59
68
mongoc_database_t * database ;
60
- mongoc_client_t * client ;
69
+ mongoc_collection_t * collection ;
61
70
mongoc_client_t * auth_client ;
62
71
mongoc_cursor_t * cursor ;
63
72
const bson_t * doc ;
64
73
bson_error_t error ;
65
- char * username ;
66
- char * uri ;
67
74
bool r ;
68
75
bson_t q ;
69
76
70
- username = gen_test_user ();
71
- uri = gen_good_uri (username );
77
+ /*
78
+ * Add an admin user first.
79
+ */
80
+ admin_username = gen_test_user ();
81
+ admin_client = test_framework_client_new (NULL );
82
+ admin_database = mongoc_client_get_database (admin_client , "admin" );
83
+ mongoc_database_remove_user (admin_database , admin_username , NULL );
84
+ bson_init (& admin_roles );
85
+ BCON_APPEND (& admin_roles ,
86
+ "0" , "{" , "role" , "root" , "db" , "admin" , "}" );
87
+
88
+ r = mongoc_database_add_user (admin_database , admin_username , "testpass" ,
89
+ & admin_roles , NULL , NULL );
90
+ assert (r );
91
+
92
+ /*
93
+ * Log in as admin.
94
+ */
95
+ mongoc_database_destroy (admin_database );
96
+ mongoc_client_destroy (admin_client );
97
+ admin_uri = gen_good_uri (admin_username , "admin" );
98
+ admin_client = test_framework_client_new (admin_uri );
72
99
73
100
/*
74
101
* Add a user to the test database.
75
102
*/
76
- client = test_framework_client_new (NULL );
77
- database = mongoc_client_get_database (client , "test" );
103
+ username = gen_test_user ();
104
+ uri = gen_good_uri (username , "test" );
105
+
106
+ database = mongoc_client_get_database (admin_client , "test" );
78
107
mongoc_database_remove_user (database , username , & error );
79
- r = mongoc_database_add_user (database , username , "testpass" , NULL , NULL , & error );
108
+ bson_init (& roles );
109
+ BCON_APPEND (& roles ,
110
+ "0" , "{" , "role" , "read" , "db" , "test" , "}" );
111
+ r = mongoc_database_add_user (database , username , "testpass" , & roles , NULL , & error );
80
112
ASSERT_CMPINT (r , = = , 1 );
81
113
mongoc_database_destroy (database );
82
114
@@ -96,21 +128,33 @@ test_mongoc_client_authenticate (void)
96
128
}
97
129
assert (!r );
98
130
}
99
- mongoc_cursor_destroy (cursor );
100
- mongoc_collection_destroy (collection );
101
131
102
132
/*
103
133
* Remove all test users.
104
134
*/
105
- database = mongoc_client_get_database (auth_client , "test" );
135
+ database = mongoc_client_get_database (admin_client , "test" );
106
136
r = mongoc_database_remove_all_users (database , & error );
107
137
assert (r );
108
- mongoc_database_destroy (database );
109
- mongoc_client_destroy (auth_client );
110
- mongoc_client_destroy (client );
111
138
112
- bson_free (username );
139
+ /*
140
+ * Remove admin user.
141
+ */
142
+ admin_database = mongoc_client_get_database (admin_client , "admin" );
143
+ r = mongoc_database_remove_user (admin_database , admin_username , NULL );
144
+ assert (r );
145
+
146
+ mongoc_cursor_destroy (cursor );
147
+ mongoc_collection_destroy (collection );
148
+ mongoc_client_destroy (auth_client );
149
+ bson_destroy (& roles );
113
150
bson_free (uri );
151
+ bson_free (username );
152
+ bson_free (admin_uri );
153
+ mongoc_database_destroy (database );
154
+ bson_destroy (& admin_roles );
155
+ mongoc_database_destroy (admin_database );
156
+ mongoc_client_destroy (admin_client );
157
+ bson_free (admin_username );
114
158
}
115
159
116
160
0 commit comments