Skip to content

Commit 65a1060

Browse files
committed
ci: test fixing
1 parent df233fc commit 65a1060

File tree

6 files changed

+146
-47
lines changed

6 files changed

+146
-47
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,4 @@ workflows:
4848
tags:
4949
only: /dev-v[0-9]+(\.[0-9]+)*/
5050
branches:
51-
ignore: /.*/
51+
only: /test-cicd\/.*/

.circleci/config_continue.yml

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,17 @@ jobs:
88
docker:
99
- image: rishabhpoddar/supertokens_website_sdk_testing_node_16
1010
steps:
11-
- run: git config --global url."https://github.com/".insteadOf ssh://git@github.com/ # This makes npm use http instead of ssh (required for node 16)
12-
- checkout
13-
- run: (cd .circleci/ && ./markDevTagAsTestNotPassed.sh)
11+
- run: echo "Testing branch << pipeline.git.branch >>"
12+
- when:
13+
condition:
14+
not:
15+
matches:
16+
pattern: "^test-cicd/.*$"
17+
value: << pipeline.git.branch >>
18+
steps:
19+
- run: git config --global url."https://github.com/".insteadOf ssh://git@github.com/ # This makes npm use http instead of ssh (required for node 16)
20+
- checkout
21+
- run: (cd .circleci/ && ./markDevTagAsTestNotPassed.sh)
1422
test-unit:
1523
docker:
1624
- image: rishabhpoddar/supertokens_flutter_sdk_testing
@@ -51,6 +59,9 @@ jobs:
5159
echo 'export NVM_DIR="$HOME/.nvm"' >> $BASH_ENV
5260
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $BASH_ENV
5361
- run: (cd .circleci/ && ./doTests.sh << parameters.fdi-version >>)
62+
- store_artifacts:
63+
path: ../supertokens-root/logs
64+
destination: logfiles
5465
test-success:
5566
docker:
5667
- image: rishabhpoddar/supertokens_website_sdk_testing_node_16
@@ -69,7 +80,7 @@ workflows:
6980
tags:
7081
only: /dev-v[0-9]+(\.[0-9]+)*/
7182
branches:
72-
ignore: /.*/
83+
only: /test-cicd\/.*/
7384
- test-unit:
7485
requires:
7586
- test-dev-tag-as-not-passed
@@ -79,7 +90,7 @@ workflows:
7990
tags:
8091
only: /dev-v[0-9]+(\.[0-9]+)*/
8192
branches:
82-
ignore: /.*/
93+
only: /test-cicd\/.*/
8394
matrix:
8495
parameters:
8596
fdi-version: placeholder

testHelpers/server/index.js

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,40 @@ let { startST, stopST, killAllST, setupST, cleanST, setKeyValueInConfig, maxVers
2525
let { middleware, errorHandler } = require("supertokens-node/framework/express");
2626
let { verifySession } = require("supertokens-node/recipe/session/framework/express");
2727
const { spawnSync } = require("child_process");
28-
const { debug } = require("console");
28+
const morgan = require("morgan");
2929
let noOfTimesRefreshCalledDuringTest = 0;
3030
let noOfTimesGetSessionCalledDuringTest = 0;
3131
let noOfTimesRefreshAttemptedDuringTest = 0;
3232
let customRefreshHeaderValue = "";
3333
let supertokens_node_version = require("supertokens-node/lib/build/version").version;
3434
let Querier = require("supertokens-node/lib/build/querier").Querier;
3535
let NormalisedURLPath = require("supertokens-node/lib/build/normalisedURLPath").default;
36-
let UserMetaDataRecipeRaw = require("supertokens-node/lib/build/recipe/usermetadata/recipe").default;
37-
3836
let Multitenancy, MultitenancyRaw, multitenancySupported;
3937
try {
4038
MultitenancyRaw = require("supertokens-node/lib/build/recipe/multitenancy/recipe").default;
41-
Multitenancy = require("supertokens-node/lib/build/recipe/multitenancy");
39+
Multitenancy = require("supertokens-node/lib/build/recipe/multitenancy/index");
4240
multitenancySupported = true;
43-
} catch {
41+
} catch (ex) {
42+
console.log({ex});
4443
multitenancySupported = false;
4544
}
4645

46+
let UserMetaDataRecipeRaw;
47+
try {
48+
UserMetaDataRecipeRaw = require("supertokens-node/lib/build/recipe/usermetadata/recipe").default;
49+
} catch {
50+
// Ignored
51+
}
52+
4753
let urlencodedParser = bodyParser.urlencoded({ limit: "20mb", extended: true, parameterLimit: 20000 });
4854
let jsonParser = bodyParser.json({ limit: "20mb" });
4955

5056
let app = express();
5157
app.use(urlencodedParser);
5258
app.use(jsonParser);
5359
app.use(cookieParser());
60+
app.use(morgan(`:date[iso] - :method :url`, { immediate: true }));
61+
app.use(morgan(`:date[iso] - :method :url :status :response-time ms - :res[content-length]`));
5462

5563
let lastSetEnableAntiCSRF = false;
5664
let lastSetEnableJWT = false;
@@ -207,20 +215,18 @@ app.use(
207215
credentials: true
208216
})
209217
);
218+
app.disable('etag');
210219

211220
app.use(middleware());
212221

213222
app.post("/login", async (req, res) => {
214223
let userId = req.body.userId;
215-
let accessTokenPayload = req.body.payload !== undefined ? req.body.payload : {};
224+
216225
let session;
217-
218226
if (multitenancySupported) {
219-
session = await Session.createNewSession(req, res, "public",
220-
accountLinkingSupported ? SuperTokens.convertToRecipeUserId(userId) : userId,
221-
accessTokenPayload);
227+
session = await Session.createNewSession(req, res, "public", accountLinkingSupported ? SuperTokens.convertToRecipeUserId(userId) : userId);
222228
} else {
223-
session = await Session.createNewSession(req, res, userId, accessTokenPayload);
229+
session = await Session.createNewSession(req, res, userId);
224230
}
225231

226232
res.send(session.getUserId());
@@ -244,16 +250,18 @@ app.post("/startst", async (req, res) => {
244250
if (enableAntiCsrf !== undefined) {
245251
SuperTokensRaw.reset();
246252
SessionRecipeRaw.reset();
247-
UserMetaDataRecipeRaw.reset();
248253

249254
if (multitenancySupported) {
250255
MultitenancyRaw.reset();
251256
}
257+
if (UserMetaDataRecipeRaw !== undefined) {
258+
UserMetaDataRecipeRaw.reset();
259+
}
252260

253261
SuperTokens.init(getConfig(enableAntiCsrf, enableJWT));
254262
}
255-
let pid = await startST();
256-
res.send(pid + "");
263+
await startST();
264+
res.send("");
257265
});
258266

259267
app.get("/featureFlags", async (req, res) => {
@@ -273,7 +281,12 @@ app.post("/reinitialiseBackendConfig", async (req, res) => {
273281

274282
SuperTokensRaw.reset();
275283
SessionRecipeRaw.reset();
276-
UserMetaDataRecipeRaw.reset();
284+
if (multitenancySupported) {
285+
MultitenancyRaw.reset();
286+
}
287+
if (UserMetaDataRecipeRaw !== undefined) {
288+
UserMetaDataRecipeRaw.reset();
289+
}
277290
SuperTokens.init(getConfig(lastSetEnableAntiCSRF, currentEnableJWT, jwtPropertyName));
278291

279292
res.send("");
@@ -575,9 +588,10 @@ app.use("*", async (req, res, next) => {
575588
app.use(errorHandler());
576589

577590
app.use(async (err, req, res, next) => {
591+
console.log({err, stack: new Error().stack });
578592
res.status(500).send(err);
579593
});
580594

581595
let server = http.createServer(app);
582596
// server.listen(process.env.NODE_PORT === undefined ? 8080 : process.env.NODE_PORT, "::");
583-
server.listen(8080, "::");
597+
server.listen(8080, "::");

testHelpers/server/package-lock.json

Lines changed: 77 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

testHelpers/server/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"cookie-parser": "1.4.4",
1313
"cors": "^2.8.5",
1414
"express": "4.17.1",
15+
"morgan": "^1.10.0",
1516
"supertokens-node": "github:supertokens/supertokens-node"
1617
}
17-
}
18+
}

testHelpers/server/utils.js

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ let fs = require("fs");
1717

1818
module.exports.executeCommand = async function(cmd) {
1919
return new Promise((resolve, reject) => {
20+
console.log("Executing command: " + cmd);
2021
exec(cmd, (err, stdout, stderr) => {
21-
2222
if (err) {
23-
reject(err);
23+
reject({err, stdout, stderr});
2424
return;
2525
}
2626
resolve({ stdout, stderr });
@@ -97,7 +97,6 @@ module.exports.killAllST = async function() {
9797
module.exports.startST = async function(host = "localhost", port = 9000) {
9898
return new Promise(async (resolve, reject) => {
9999
let installationPath = process.env.INSTALL_PATH;
100-
let pidsBefore = await getListOfPids();
101100
let returned = false;
102101
module.exports
103102
.executeCommand(
@@ -109,36 +108,35 @@ module.exports.startST = async function(host = "localhost", port = 9000) {
109108
port +
110109
" test_mode"
111110
)
112-
.catch(err => {
111+
.catch(({err, stdout, stderr}) => {
113112
if (!returned) {
113+
console.log("Starting ST failed: java command returned early w/ non-zero exit code");
114+
console.log(err);
115+
console.log(stdout);
116+
console.log(stderr);
114117
returned = true;
115118
reject(err);
116119
}
117120
});
118121
let startTime = Date.now();
122+
let helloResp;
119123
while (Date.now() - startTime < 10000) {
120-
let pidsAfter = await getListOfPids();
121-
if (pidsAfter.length <= pidsBefore.length) {
122-
await new Promise(r => setTimeout(r, 100));
123-
continue;
124-
}
125-
let nonIntersection = pidsAfter.filter(x => !pidsBefore.includes(x));
126-
if (nonIntersection.length !== 1) {
127-
if (!returned) {
128-
returned = true;
129-
reject("something went wrong while starting ST");
130-
}
131-
} else {
132-
if (!returned) {
124+
try {
125+
helloResp = await fetch(`http://${host}:${port}/hello`);
126+
if (helloResp.status === 200) {
127+
console.log("Started ST, it's saying: " + await helloResp.text());
128+
resolve();
133129
returned = true;
134-
resolve(nonIntersection[0]);
130+
return;
135131
}
132+
} catch (ex) {
133+
console.log("Waiting for ST to start, caught exception: " + ex);
134+
// We expect (and ignore) network errors here
136135
}
136+
await new Promise(r => setTimeout(r, 100));
137137
}
138-
if (!returned) {
139-
returned = true;
140-
reject("could not start ST process");
141-
}
138+
console.log(helloResp);
139+
reject("Starting ST process timed out");
142140
});
143141
};
144142

0 commit comments

Comments
 (0)