I encountered the same problem in C sharp.
It’s likely we’re hitting IOPS limits as we (@Cool-Katt and I) merged a ton of changes the past few days, causing a lot of retesting.
We are very close to solving this by moving tests to the browser @AngelaHiss and @Liene31 .
For now:
- Apologies. This is an infrastructure issue out of our hands, but caused by us.
- If you are feeling adventurous you can try to solve the exercise locally using the CLI. Then at least you know if the tests pass or not.
- I will post in this thread when the browser test-runner is live.
Thanks for the update.
Trying to work my way out using the CLI. ![]()
Liene
my tests in javascript are timing out too. can’t wait for the browser test-runner @SleeplessByte mentioned! Anyone know that time scale for the fix? today, this week, this month?
I’ve been testing it for the past week. Wrote it two weeks ago.
Should be good to go very soon ![]()
![]()
![]()
Está acontencendo comigo também.
Others have mentioned the “Tests timing out” being due to a DDoS attack - is it actually just the infrastructure problem you’ve mentioned?
Also - I’ve submitted via CLI while it’s down, but it looks like it’s stuck trying to “process” it on the exercise page - is it ok to mark it as complete and move on or will the submission be lost?
See 🚨 Tests timing out? Read this
@Leonod33 you can continue, your submission will not be lost. What happens here is that even when you submit via CLI, the tests “time out”. It should periodically try again. You can safely continue.
More information:
We have a < 30s window to complete the tests, but one of the many challenges is “disk operation resources”.
Tracks such as JavaScript have the “node module” issue, where it requires a lot of resources to have a project with test runner etc. Because of some rather weird architecture choices in jest, we need all the dependencies to be local to your solution. That means moving (or symlinking) a lot of files.
Amazon has two resources that constrain us. Disk IOPS and for some things we used to use (dunno if still true) burstable performance instances. Both of these things can drain, and then everything becomes slow. But when things become slow, we can no longer hit the 30s window.
Solutions
- More money buys better hardware, so more people donating helps.
- Heavier caching of resources. Jeremy (Mr. Exercism himself) is working on this. This will help a lot.
- Blocking malicious requests. This has been improved and helped quite a bit (~20%).
- Tracks having a in-browser test runner. I have written one for JavaScript which I have tested for the past 2 weeks. It will go live very very soon.
It’s a result of mitigations against being DDOS’d.
Issue Resolved: My tests are running this morning.
I am still gettting timedout error on my solutions. They are passing locally. I am on javascript track
Please try the online editor when this happens.
Please also could you:
- Share your code so we can see what/why is happening
- Share the specific exercises you see this on so we check logs.
Of the last ~1000 JS submissions:
passed: 137
failed: 886
errored: 203
exceptioned: 5
Those exceptioned ones might show as timed out - the rest should give errors (or success messages).
I see that yours seem to have issues. I’ll dig into what happened with them when I’m back around later.
OK - so @SleeplessByte, this code times out every time for High Score Board using the Docker test runner. But runs instantly on the browser one. I’ve rerun it a couple of times to check. I’ve sent you the dir on Discord.
/// <reference path="./global.d.ts" />
// @ts-check
/**
* Creates a new score board with an initial entry.
*
* @returns {Record<string, number>} new score board
*/
export function createScoreBoard() {
//throw new Error('Please implement the createScoreBoard function');
// const obj = { "The Best Ever": 1000000 };
// return obj;
return { "The Best Ever": 1_000_000 };
}
/**
* Adds a player to a score board.
*
* @param {Record<string, number>} scoreBoard
* @param {string} player
* @param {number} score
* @returns {Record<string, number>} updated score board
*/
export function addPlayer(scoreBoard, player, score) {
//throw new Error("Please implement the addPlayer function");
scoreBoard[player] = score;
return scoreBoard;
}
/**
* Removes a player from a score board.
*
* @param {Record<string, number>} scoreBoard
* @param {string} player
* @returns {Record<string, number>} updated score board
*/
export function removePlayer(scoreBoard, player) {
//throw new Error("Please implement the removePlayer function");
delete scoreBoard[player];
return scoreBoard;
}
/**
* Increases a player's score by the given amount.
*
* @param {Record<string, number>} scoreBoard
* @param {string} player
* @param {number} points
* @returns {Record<string, number>} updated score board
*/
export function updateScore(scoreBoard, player, points) {
//throw new Error("Please implement the updateScore function");
scoreBoard[player] += points;
return scoreBoard;
}
/**
* Applies 100 bonus points to all players on the board.
*
* @param {Record<string, number>} scoreBoard
* @returns {Record<string, number>} updated score board
*/
export function applyMondayBonus(scoreBoard) {
//throw new Error("Please implement the applyMondayBonus function");
//
for (const player in scoreBoard) {
scoreBoard[player] += 100;
}
return scoreBoard;
}
/**
* Normalizes a score with the provided normalization function.
*
* @param {Params} params the parameters for performing the normalization
* @returns {number} normalized score
*/
export function normalizeScore(params) {
//throw new Error("Please implement the normalizeScore function");
return params.normalizeFunction(params.score);
}
Hi @iHiD . I was on Mixed-juices exercise when this occured. The iteration 1 shows failed. I submitted the iteration 2 using the online editor(i think with some improvements) and it worked. I copied the same iteration 1 solution and submitted as iteration 3 using an online editor and everything worked.
// @ts-check
//
// The line above enables type checking for this file. Various IDEs interpret
// the @ts-check directive. It will give you helpful autocompletion when
// implementing this exercise.
/**
* Determines how long it takes to prepare a certain juice.
*
* @param {string} name
* @returns {number} time in minutes
*/
export function timeToMixJuice(name) {
//throw new Error('Please implement the timeToMixJuice function');
switch (name) {
case "Pure Strawberry Joy":
return 0.5;
case "Energizer":
case "Green Garden":
return 1.5;
case "Tropical Island":
return 3;
case "All or Nothing":
return 5;
default:
return 2.5;
}
}
/**
* Calculates the number of limes that need to be cut
* to reach a certain supply.
*
* @param {number} wedgesNeeded
* @param {string[]} limes
* @returns {number} number of limes cut
*/
export function limesToCut(wedgesNeeded, limes) {
//throw new Error("Please implement the limesToCut function");
let need = wedgesNeeded;
let i = 0;
let limesNeeded = 0;
while (need > 0 && i < limes.length) {
if (limes[i] == "small") {
need -= 6;
} else if (limes[i] == "medium") {
need -= 8;
} else {
need -= 10;
}
i += 1;
limesNeeded += 1;
}
return limesNeeded;
}
/**
* Determines which juices still need to be prepared after the end of the shift.
*
* @param {number} timeLeft
* @param {string[]} orders
* @returns {string[]} remaining orders after the time is up
*/
export function remainingOrders(timeLeft, orders) {
//throw new Error("Please implement the remainingOrders function");
//
const remainingOrders = [];
//let i = 0;
// Pure Strawberry Joy = 0.5
// Energizer = 1.5
// GreenGarden = 1.5
// Tropical Island = 3
// All or Nothing = 5;
// Others = 2.5
//
for (let i = 0; i < orders.length; i++) {
let preparationTime = timeToMixJuice(orders[i]);
if (timeLeft >= preparationTime || timeLeft > 0) {
timeLeft -= preparationTime;
} else {
return orders.slice(i);
}
}
return remainingOrders;
}
I have been using the online editor since then
Thank you for the update ![]()
Yes, we understand the issue (IOPS limits on EC2 EBS drives - that are hit for JS due to the amount of per-test-run node modules) and have a solution. It’ll take a few more days of work to get it all into production.
No Worries. I am already loving using the online editor.