|
26 | 26 | #include <sys/stat.h> |
27 | 27 | #include <unistd.h> |
28 | 28 |
|
| 29 | +extern "C" { |
| 30 | + duk_ret_t ccsp_session_module_open(duk_context *ctx); |
| 31 | +} |
| 32 | + |
29 | 33 | using namespace std; |
30 | 34 |
|
31 | 35 | class BufferFreer |
@@ -106,6 +110,81 @@ TEST(general, parser) { |
106 | 110 | } |
107 | 111 | } |
108 | 112 |
|
| 113 | +TEST(general, session_create_multiple_calls_succeed) |
| 114 | +{ |
| 115 | + duk_context* ctx = duk_create_heap_default(); |
| 116 | + ASSERT_NE(ctx, nullptr); |
| 117 | + |
| 118 | + duk_push_c_function(ctx, ccsp_session_module_open, 0); |
| 119 | + duk_call(ctx, 0); |
| 120 | + duk_put_global_string(ctx, "ccsp_session"); |
| 121 | + |
| 122 | + duk_get_global_string(ctx, "ccsp_session"); |
| 123 | + duk_get_prop_string(ctx, -1, "create"); |
| 124 | + ASSERT_EQ(duk_pcall(ctx, 0), DUK_EXEC_SUCCESS); |
| 125 | + EXPECT_TRUE(duk_get_boolean(ctx, -1)); |
| 126 | + duk_pop_2(ctx); |
| 127 | + |
| 128 | + duk_get_global_string(ctx, "ccsp_session"); |
| 129 | + duk_get_prop_string(ctx, -1, "create"); |
| 130 | + ASSERT_EQ(duk_pcall(ctx, 0), DUK_EXEC_SUCCESS); |
| 131 | + EXPECT_TRUE(duk_get_boolean(ctx, -1)); |
| 132 | + duk_pop_2(ctx); |
| 133 | + |
| 134 | + duk_get_global_string(ctx, "ccsp_session"); |
| 135 | + duk_get_prop_string(ctx, -1, "destroy"); |
| 136 | + ASSERT_EQ(duk_pcall(ctx, 0), DUK_EXEC_SUCCESS); |
| 137 | + EXPECT_TRUE(duk_get_boolean(ctx, -1)); |
| 138 | + duk_pop_2(ctx); |
| 139 | + |
| 140 | + duk_destroy_heap(ctx); |
| 141 | +} |
| 142 | + |
| 143 | +TEST(general, session_create_destroy_cycle_and_id_format) |
| 144 | +{ |
| 145 | + duk_context* ctx = duk_create_heap_default(); |
| 146 | + ASSERT_NE(ctx, nullptr); |
| 147 | + |
| 148 | + duk_push_c_function(ctx, ccsp_session_module_open, 0); |
| 149 | + duk_call(ctx, 0); |
| 150 | + duk_put_global_string(ctx, "ccsp_session"); |
| 151 | + |
| 152 | + duk_get_global_string(ctx, "ccsp_session"); |
| 153 | + duk_get_prop_string(ctx, -1, "create"); |
| 154 | + ASSERT_EQ(duk_pcall(ctx, 0), DUK_EXEC_SUCCESS); |
| 155 | + EXPECT_TRUE(duk_get_boolean(ctx, -1)); |
| 156 | + duk_pop_2(ctx); |
| 157 | + |
| 158 | + duk_get_global_string(ctx, "ccsp_session"); |
| 159 | + duk_get_prop_string(ctx, -1, "getId"); |
| 160 | + ASSERT_EQ(duk_pcall(ctx, 0), DUK_EXEC_SUCCESS); |
| 161 | + const char* first_id = duk_get_string(ctx, -1); |
| 162 | + ASSERT_NE(first_id, nullptr); |
| 163 | + EXPECT_EQ(strlen(first_id), 40u); |
| 164 | + EXPECT_EQ(strncmp(first_id, "jst_sess", 8), 0); |
| 165 | + duk_pop_2(ctx); |
| 166 | + |
| 167 | + duk_get_global_string(ctx, "ccsp_session"); |
| 168 | + duk_get_prop_string(ctx, -1, "destroy"); |
| 169 | + ASSERT_EQ(duk_pcall(ctx, 0), DUK_EXEC_SUCCESS); |
| 170 | + EXPECT_TRUE(duk_get_boolean(ctx, -1)); |
| 171 | + duk_pop_2(ctx); |
| 172 | + |
| 173 | + duk_get_global_string(ctx, "ccsp_session"); |
| 174 | + duk_get_prop_string(ctx, -1, "create"); |
| 175 | + ASSERT_EQ(duk_pcall(ctx, 0), DUK_EXEC_SUCCESS); |
| 176 | + EXPECT_TRUE(duk_get_boolean(ctx, -1)); |
| 177 | + duk_pop_2(ctx); |
| 178 | + |
| 179 | + duk_get_global_string(ctx, "ccsp_session"); |
| 180 | + duk_get_prop_string(ctx, -1, "destroy"); |
| 181 | + ASSERT_EQ(duk_pcall(ctx, 0), DUK_EXEC_SUCCESS); |
| 182 | + EXPECT_TRUE(duk_get_boolean(ctx, -1)); |
| 183 | + duk_pop_2(ctx); |
| 184 | + |
| 185 | + duk_destroy_heap(ctx); |
| 186 | +} |
| 187 | + |
109 | 188 | int main(int argc, char* argv[]) |
110 | 189 | { |
111 | 190 | ::testing::InitGoogleTest(&argc, argv); |
|
0 commit comments