From bd5d67e4448dccac2a57fd3b34526d419d46a92c Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Mon, 14 Dec 2015 20:58:49 -0500 Subject: [PATCH] nitrpg: avoid race conditions in tests that imply database Signed-off-by: Alexandre Terrasa --- contrib/nitrpg/src/test_achievements.nit | 24 +++++++------------- contrib/nitrpg/src/test_events.nit | 24 +++++++------------- contrib/nitrpg/src/test_game.nit | 27 ++++++++-------------- contrib/nitrpg/src/test_helper.nit | 21 ++++++++++++++++- contrib/nitrpg/src/test_listener.nit | 36 ++++++++++-------------------- contrib/nitrpg/src/test_statistics.nit | 9 +++----- 6 files changed, 60 insertions(+), 81 deletions(-) diff --git a/contrib/nitrpg/src/test_achievements.nit b/contrib/nitrpg/src/test_achievements.nit index b5d4cb7..033832f 100644 --- a/contrib/nitrpg/src/test_achievements.nit +++ b/contrib/nitrpg/src/test_achievements.nit @@ -24,29 +24,27 @@ class TestGame super NitrpgTestHelper fun test_add_achievement do - var db = load_db("test_add_achievement") + var db = gen_test_db var game = load_game("Morriar/nit", db) var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15) var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15) game.add_achievement(a1) game.add_achievement(a2) assert game.load_achievements.length == 2 - db.drop end fun test_load_achievement do - var db = load_db("test_load_achievement") + var db = gen_test_db var game = load_game("Morriar/nit", db) var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15) var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15) game.add_achievement(a1) assert game.load_achievement(a1.id).id == "test_id1" assert game.load_achievement(a2.id) == null - db.drop end fun test_load_achievements do - var db = load_db("test_load_achievements") + var db = gen_test_db var game = load_game("Morriar/nit", db) var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15) var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15) @@ -58,7 +56,6 @@ class TestGame var res = game.load_achievements assert res.length == 2 for a in res.values do assert ok.has(a.id) - db.drop end end @@ -66,7 +63,7 @@ class TestPlayer super NitrpgTestHelper fun test_add_achievement do - var db = load_db("test_add_achievement") + var db = gen_test_db var game = load_game("Morriar/nit", db) var player1 = new Player(game, "Morriar") var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15) @@ -74,11 +71,10 @@ class TestPlayer player1.add_achievement(a1) player1.add_achievement(a2) assert player1.load_achievements.length == 2 - db.drop end fun test_load_achievement do - var db = load_db("test_load_achievement") + var db = gen_test_db var game = load_game("Morriar/nit", db) var player1 = new Player(game, "Morriar") var player2 = new Player(game, "xymus") @@ -90,11 +86,10 @@ class TestPlayer assert player1.load_achievement(a2.id) == null assert player2.load_achievement(a2.id).id == "test_id2" assert player2.load_achievement(a1.id) == null - db.drop end fun test_load_achievements do - var db = load_db("test_load_achievements") + var db = gen_test_db var game = load_game("Morriar/nit", db) var player1 = new Player(game, "Morriar") var player2 = new Player(game, "xymus") @@ -108,7 +103,6 @@ class TestPlayer var res = player1.load_achievements assert res.length == 2 for a in res.values do assert ok.has(a.id) - db.drop end end @@ -116,18 +110,17 @@ class TestAchievement super NitrpgTestHelper fun test_init do - var db = load_db("test_init") + var db = gen_test_db var game = load_game("Morriar/nit", db) var a = new Achievement(game, "test_id", "test_name", "test_desc", 15) assert a.id == "test_id" assert a.name == "test_name" assert a.desc == "test_desc" assert a.reward == 15 - db.drop end fun test_init_from_json do - var db = load_db("test_init_from_json") + var db = gen_test_db var game = load_game("Morriar/nit", db) var json = """{ "id": "test_id", @@ -140,6 +133,5 @@ class TestAchievement assert a.name == "test_name" assert a.desc == "test_desc" assert a.reward == 15 - db.drop end end diff --git a/contrib/nitrpg/src/test_events.nit b/contrib/nitrpg/src/test_events.nit index 83f17bf..b960501 100644 --- a/contrib/nitrpg/src/test_events.nit +++ b/contrib/nitrpg/src/test_events.nit @@ -24,29 +24,27 @@ class TestGame super NitrpgTestHelper fun test_add_event do - var db = load_db("test_add_event") + var db = gen_test_db var game = load_game("Morriar/nit", db) var event1 = new GameEvent(game, "test_kind", new JsonObject) var event2 = new GameEvent(game, "test_kind", new JsonObject) game.add_event(event1) game.add_event(event2) assert game.load_events.length == 2 - db.drop end fun test_load_event do - var db = load_db("test_load_event") + var db = gen_test_db var game = load_game("Morriar/nit", db) var event1 = new GameEvent(game, "test_kind", new JsonObject) var event2 = new GameEvent(game, "test_kind", new JsonObject) game.add_event(event1) assert game.load_event(event1.internal_id).kind == "test_kind" assert game.load_event(event2.internal_id) == null - db.drop end fun test_load_events do - var db = load_db("test_load_events") + var db = gen_test_db var game = load_game("Morriar/nit", db) var event1 = new GameEvent(game, "test_kind", new JsonObject) var event2 = new GameEvent(game, "test_kind", new JsonObject) @@ -58,7 +56,6 @@ class TestGame var res = game.load_events assert res.length == 2 for event in res do assert ok.has(event.internal_id) - db.drop end end @@ -66,7 +63,7 @@ class TestPlayer super NitrpgTestHelper fun test_add_event do - var db = load_db("test_add_event") + var db = gen_test_db var game = load_game("Morriar/nit", db) var player1 = new Player(game, "Morriar") var player2 = new Player(game, "xymus") @@ -76,11 +73,10 @@ class TestPlayer player1.add_event(event2) assert player1.load_events.length == 2 assert player2.load_events.length == 0 - db.drop end fun test_load_event do - var db = load_db("test_load_event") + var db = gen_test_db var game = load_game("Morriar/nit", db) var player1 = new Player(game, "Morriar") var player2 = new Player(game, "xymus") @@ -92,11 +88,10 @@ class TestPlayer assert player1.load_event(event2.internal_id) == null assert player2.load_event(event2.internal_id).kind == "test_kind" assert player2.load_event(event1.internal_id) == null - db.drop end fun test_load_events do - var db = load_db("test_load_events") + var db = gen_test_db var game = load_game("Morriar/nit", db) var player1 = new Player(game, "Morriar") var player2 = new Player(game, "xymus") @@ -110,7 +105,6 @@ class TestPlayer assert player2.load_events.length == 1 var ok = [event1.internal_id, event2.internal_id] for event in player1.load_events do assert ok.has(event.internal_id) - db.drop end end @@ -118,15 +112,14 @@ class TestGameEvent super NitrpgTestHelper fun test_init do - var db = load_db("test_init") + var db = gen_test_db var game = load_game("Morriar/nit", db) var event = new GameEvent(game, "test_kind", new JsonObject) assert event.to_json["kind"] == "test_kind" - db.drop end fun test_init_from_json do - var db = load_db("test_init_from_json") + var db = gen_test_db var game = load_game("Morriar/nit", db) var json = """{ "internal_id": "test_id", @@ -139,6 +132,5 @@ class TestGameEvent assert event.kind == "test_kind" assert event.data.to_json == """{"test_field":"test_value"}""" assert event.time.to_s == "2015-02-05T00:00:00Z" - db.drop end end diff --git a/contrib/nitrpg/src/test_game.nit b/contrib/nitrpg/src/test_game.nit index 78f3bd0..fceafb9 100644 --- a/contrib/nitrpg/src/test_game.nit +++ b/contrib/nitrpg/src/test_game.nit @@ -23,7 +23,7 @@ class TestGame super NitrpgTestHelper fun test_add_player do - var db = load_db("test_add_player") + var db = gen_test_db var game = load_game("privat/nit", db) var users = ["Morriar", "xymus"] for name in users do @@ -34,11 +34,10 @@ class TestGame for player in res do assert users.has(player.name) end - db.drop end fun test_load_player do - var db = load_db("test_load_player") + var db = gen_test_db var game = load_game("privat/nit", db) var ogame = load_game("Morriar/nit", db) @@ -51,11 +50,10 @@ class TestGame assert game.load_player("Morriar").name == "Morriar" assert ogame.load_player("privat").name == "privat" assert ogame.load_player("Morriar") == null - db.drop end fun test_load_players do - var db = load_db("test_load_players") + var db = gen_test_db var game = load_game("privat/nit", db) var ogame = load_game("Morriar/nit", db) @@ -69,7 +67,6 @@ class TestGame var players = game.load_players var ok = ["Morriar", "xymus"] for player in players.values do assert ok.has(player.name) - db.drop end end @@ -77,47 +74,43 @@ class TestPlayer super NitrpgTestHelper fun test_init do - var db = load_db("test_init") + var db = gen_test_db var game = load_game("privat/nit", db) var player = new Player(game, "Morriar") assert player.name == "Morriar" assert player.user.login == "Morriar" assert player.nitcoins == 0 - db.drop end fun test_init_from_json do - var db = load_db("test_init_from_json") + var db = gen_test_db var game = load_game("privat/nit", db) var json = """{"name": "Morriar", "nitcoins": 10}""".parse_json var player = new Player.from_json(game, json.as(JsonObject)) assert player.name == "Morriar" assert player.user.login == "Morriar" assert player.nitcoins == 10 - db.drop end fun test_save do - var db = load_db("test_save") + var db = gen_test_db var game = load_game("privat/nit", db) var json = """{"name": "Morriar", "nitcoins": 10}""".parse_json.as(JsonObject) var player = new Player.from_json(game, json) player.save assert game.db.collection("players").find(json) != null - db.drop end fun test_game_add_player do - var db = load_db("test_game_add_player") + var db = gen_test_db var game = load_game("privat/nit", db) game.add_player(game.api.load_user("Morriar").as(not null)) var json = """{"name": "Morriar"}""".parse_json.as(JsonObject) assert game.db.collection("players").find(json) != null - db.drop end fun test_game_load_player do - var db = load_db("test_game_load_player") + var db = gen_test_db var game = load_game("privat/nit", db) var json = """{"name": "Morriar", "nitcoins": 10}""".parse_json.as(JsonObject) var player = new Player.from_json(game, json) @@ -125,7 +118,6 @@ class TestPlayer var oplayer = game.load_player("Morriar") assert oplayer != null assert player.nitcoins == oplayer.nitcoins - db.drop end end @@ -133,7 +125,7 @@ class TestUser super NitrpgTestHelper fun test_player do - var db = load_db("test_player") + var db = gen_test_db var api = new GithubAPI(get_github_oauth) var game = load_game("privat/nit", db) var user = api.load_user("Morriar") @@ -141,6 +133,5 @@ class TestUser var player = user.player(game) assert player.name == "Morriar" game.clear - db.drop end end diff --git a/contrib/nitrpg/src/test_helper.nit b/contrib/nitrpg/src/test_helper.nit index d8ba14e..1ac8314 100644 --- a/contrib/nitrpg/src/test_helper.nit +++ b/contrib/nitrpg/src/test_helper.nit @@ -36,7 +36,7 @@ abstract class NitrpgTestHelper var mongo = new MongoClient("mongodb://localhost:27017/") # Load a new test database by with a name - fun load_db(name: String): MongoDb do return mongo.database(name) + private fun load_db(name: String): MongoDb do return mongo.database(name) # Load a repo by its name. fun load_repo(name: String): Repo do @@ -51,4 +51,23 @@ abstract class NitrpgTestHelper game.db_name = db.name return game end + + # Stack of db used for testing. + var test_dbs = new Array[MongoDb] + + # Gen a test db with a random name (to avoid race conditions). + fun gen_test_db: MongoDb do + var db_name = "test_nitrpg_{get_time}_{1000.rand}" + var db = load_db(db_name) + test_dbs.add db + return db + end + + # Should be called after your test. + fun drop_test_db do + var db = test_dbs.pop + db.drop + end + + redef fun after_test do drop_test_db end diff --git a/contrib/nitrpg/src/test_listener.nit b/contrib/nitrpg/src/test_listener.nit index edbfe37..ee6d13b 100644 --- a/contrib/nitrpg/src/test_listener.nit +++ b/contrib/nitrpg/src/test_listener.nit @@ -45,7 +45,7 @@ class TestListener var repo: Repo is lazy do return load_repo("Morriar/nit") fun test_game_issue_stats do - var db = load_db("test_game_issue_stats") + var db = gen_test_db var l = new DummyListener l.add_reactor(new StatisticsReactor) @@ -64,11 +64,10 @@ class TestListener game = load_game("Morriar/nit", db) assert game.stats.overall["issues"] == 1 assert game.stats.overall["issues_open"] == 1 - db.drop end fun test_player_issue_stats do - var db = load_db("test_player_issue_stats") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new StatisticsReactor) @@ -88,11 +87,10 @@ class TestListener player = new Player(game, "Morriar") assert player.stats.overall["issues"] == 1 assert player.stats.overall["issues_open"] == 1 - db.drop end fun test_game_pr_stats do - var db = load_db("test_game_pr_stats") + var db = gen_test_db var l = new DummyListener l.add_reactor(new StatisticsReactor) @@ -121,11 +119,10 @@ class TestListener assert game.stats.overall["pulls"] == 1 assert game.stats.overall["pulls_open"] == 0 assert game.stats.overall["commits"] == 2 - db.drop end fun test_game_issue_comment_stats do - var db = load_db("test_game_issue_comment_stats") + var db = gen_test_db var l = new DummyListener l.add_reactor(new StatisticsReactor) @@ -144,11 +141,10 @@ class TestListener game = load_game("Morriar/nit", db) assert game.stats.overall["comments"] == 2 assert game.stats.overall["reviews"] == 1 - db.drop end fun test_player_pull_reactor do - var db = load_db("test_player_pull_reactor") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new PlayerReactor) @@ -170,11 +166,10 @@ class TestListener l.apply_event(generator.pull_close(pull), db) player = new Player(game, "itch76") assert player.stats.overall["nitcoins"] == 12 - db.drop end fun test_player_review_reactor do - var db = load_db("test_player_review_reactor") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new PlayerReactor) @@ -214,11 +209,10 @@ class TestListener l.apply_event(generator.issue_comment_event(pull, comment), db) player = new Player(game, "Morriar") assert player.stats.overall["nitcoins"] == 4 - db.drop end fun test_X_issues_achievements do - var db = load_db("test_X_issues_achievements") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new StatisticsReactor) @@ -238,11 +232,10 @@ class TestListener end var player = new Player(game, "Morriar") assert player.stats.overall["nitcoins"] == 1110 - db.drop end fun test_X_pulls_achievements do - var db = load_db("test_X_pulls_achievements") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new StatisticsReactor) @@ -262,11 +255,10 @@ class TestListener end var player = new Player(game, "itch76") assert player.stats.overall["nitcoins"] == 1110 - db.drop end fun test_X_commits_achievements do - var db = load_db("test_X_commits_achievements") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new StatisticsReactor) @@ -289,11 +281,10 @@ class TestListener end var player = new Player(game, "itch76") assert player.stats.overall["nitcoins"] == 11110 - db.drop end fun test_X_comments_achievements do - var db = load_db("test_X_comments_achievements") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new StatisticsReactor) @@ -315,11 +306,10 @@ class TestListener end var player = new Player(game, "Morriar") assert player.stats.overall["nitcoins"] == 1110 - db.drop end fun test_issues_achievements do - var db = load_db("test_issues_achievements") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new IssueAboutNitdoc, new IssueAboutFFI) @@ -333,11 +323,10 @@ class TestListener assert player.load_achievements.has_key("issue_about_nitdoc") assert player.load_achievements.has_key("issue_about_ffi") assert player.stats.overall["nitcoins"] == 20 - db.drop end fun test_comments_reactor do - var db = load_db("test_comments_reactor") + var db = gen_test_db var game = load_game("Morriar/nit", db) var l = new DummyListener l.add_reactor(new PlayerPingGod, new PlayerFirstReview, new PlayerSaysNitcoin) @@ -364,6 +353,5 @@ class TestListener player = new Player(game, "Morriar") assert player.load_achievements.has_key("player_says_nitcoin") assert player.stats.overall["nitcoins"] == 70 - db.drop end end diff --git a/contrib/nitrpg/src/test_statistics.nit b/contrib/nitrpg/src/test_statistics.nit index aa4c893..766726c 100644 --- a/contrib/nitrpg/src/test_statistics.nit +++ b/contrib/nitrpg/src/test_statistics.nit @@ -24,7 +24,7 @@ class TestGame super NitrpgTestHelper fun test_game_stats do - var db = load_db("test_game_stats") + var db = gen_test_db var game = load_game("privat/nit", db) var stats = game.stats assert stats.overall["test"] == 0 @@ -35,7 +35,6 @@ class TestGame var ostats = ogame.stats ostats.overall.inc("test") assert ostats.overall["test"] == 2 - db.drop end end @@ -43,7 +42,7 @@ class TestPlayer super NitrpgTestHelper fun test_player_stats do - var db = load_db("test_player_stats") + var db = gen_test_db var game = load_game("privat/nit", db) var player = new Player(game, "Morriar") var stats = player.stats @@ -55,7 +54,6 @@ class TestPlayer var ostats = oplayer.stats ostats.overall.inc("test") assert ostats.overall["test"] == 2 - db.drop end end @@ -63,7 +61,7 @@ class TestGameStats super NitrpgTestHelper fun test_init_from_json do - var db = load_db("test_init_from_json") + var db = gen_test_db var game = load_game("privat/nit", db) var owner = new Player(game, "Morriar") var json = """{ @@ -78,6 +76,5 @@ class TestGameStats assert stats["test0"] == 0 assert stats["test1"] == 10 assert stats["test2"] == 20 - db.drop end end -- 1.7.9.5