From 390a0b8e830d9684f723a78f1134f2f219c45abb Mon Sep 17 00:00:00 2001 From: Pavel Djundik Date: Fri, 4 Oct 2019 14:19:04 +0300 Subject: [PATCH] Let OS generate a port in link prefetch tests --- test/plugins/link.js | 159 +++++++++++++++++++++++++++------------- test/plugins/storage.js | 28 ++++--- 2 files changed, 127 insertions(+), 60 deletions(-) diff --git a/test/plugins/link.js b/test/plugins/link.js index 565f0e69..a7aa04b0 100644 --- a/test/plugins/link.js +++ b/test/plugins/link.js @@ -16,7 +16,10 @@ describe("Link plugin", function() { app.get("/real-test-image.png", function(req, res) { res.sendFile(path.resolve(__dirname, "../../client/img/logo-grey-bg-120x120px.png")); }); - this.connection = app.listen(9002, done); + this.connection = app.listen(0, () => { + this.port = this.connection.address().port; + done(); + }); this.irc = util.createClient(); this.network = util.createNetwork(); @@ -29,7 +32,7 @@ describe("Link plugin", function() { }); it("should be able to fetch basic information about URLs", function(done) { - const url = "http://localhost:9002/basic"; + const url = "http://localhost:" + this.port + "/basic"; const message = this.irc.createMessage({ text: url, }); @@ -66,7 +69,7 @@ describe("Link plugin", function() { it("should prefer og:title over title", function(done) { const message = this.irc.createMessage({ - text: "http://localhost:9002/basic-og", + text: "http://localhost:" + this.port + "/basic-og", }); link(this.irc, this.network.channels[0], message); @@ -83,7 +86,7 @@ describe("Link plugin", function() { it("should find only the first matching tag", function(done) { const message = this.irc.createMessage({ - text: "http://localhost:9002/duplicate-tags", + text: "http://localhost:" + this.port + "/duplicate-tags", }); link(this.irc, this.network.channels[0], message); @@ -103,7 +106,7 @@ describe("Link plugin", function() { it("should prefer og:description over description", function(done) { const message = this.irc.createMessage({ - text: "http://localhost:9002/description-og", + text: "http://localhost:" + this.port + "/description-og", }); link(this.irc, this.network.channels[0], message); @@ -121,62 +124,76 @@ describe("Link plugin", function() { }); it("should find og:image with full url", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002/thumb", + text: "http://localhost:" + this.port + "/thumb", }); link(this.irc, this.network.channels[0], message); app.get("/thumb", function(req, res) { res.send( - "Google" + "Google" ); }); this.irc.once("msg:preview", function(data) { expect(data.preview.head).to.equal("Google"); - expect(data.preview.thumb).to.equal("http://localhost:9002/real-test-image.png"); + expect(data.preview.thumb).to.equal( + "http://localhost:" + port + "/real-test-image.png" + ); done(); }); }); it("should find image_src", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002/thumb-image-src", + text: "http://localhost:" + this.port + "/thumb-image-src", }); link(this.irc, this.network.channels[0], message); app.get("/thumb-image-src", function(req, res) { - res.send(""); + res.send( + "" + ); }); this.irc.once("msg:preview", function(data) { - expect(data.preview.thumb).to.equal("http://localhost:9002/real-test-image.png"); + expect(data.preview.thumb).to.equal( + "http://localhost:" + port + "/real-test-image.png" + ); done(); }); }); it("should correctly resolve relative protocol", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002/thumb-image-src", + text: "http://localhost:" + this.port + "/thumb-image-src", }); link(this.irc, this.network.channels[0], message); app.get("/thumb-image-src", function(req, res) { - res.send(""); + res.send(""); }); this.irc.once("msg:preview", function(data) { - expect(data.preview.thumb).to.equal("http://localhost:9002/real-test-image.png"); + expect(data.preview.thumb).to.equal( + "http://localhost:" + port + "/real-test-image.png" + ); done(); }); }); it("should resolve url correctly for relative url", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002/relative-thumb", + text: "http://localhost:" + this.port + "/relative-thumb", }); link(this.irc, this.network.channels[0], message); @@ -188,73 +205,87 @@ describe("Link plugin", function() { }); this.irc.once("msg:preview", function(data) { - expect(data.preview.thumb).to.equal("http://localhost:9002/real-test-image.png"); + expect(data.preview.thumb).to.equal( + "http://localhost:" + port + "/real-test-image.png" + ); expect(data.preview.head).to.equal("test relative image"); - expect(data.preview.link).to.equal("http://localhost:9002/relative-thumb"); + expect(data.preview.link).to.equal("http://localhost:" + port + "/relative-thumb"); done(); }); }); it("should send untitled page if there is a thumbnail", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002/thumb-no-title", + text: "http://localhost:" + this.port + "/thumb-no-title", }); link(this.irc, this.network.channels[0], message); app.get("/thumb-no-title", function(req, res) { res.send( - "" + "" ); }); this.irc.once("msg:preview", function(data) { expect(data.preview.head).to.equal("Untitled page"); - expect(data.preview.thumb).to.equal("http://localhost:9002/real-test-image.png"); - expect(data.preview.link).to.equal("http://localhost:9002/thumb-no-title"); + expect(data.preview.thumb).to.equal( + "http://localhost:" + port + "/real-test-image.png" + ); + expect(data.preview.link).to.equal("http://localhost:" + port + "/thumb-no-title"); done(); }); }); it("should not send thumbnail if image is 404", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002/thumb-404", + text: "http://localhost:" + this.port + "/thumb-404", }); link(this.irc, this.network.channels[0], message); app.get("/thumb-404", function(req, res) { res.send( - "404 image" + "404 image" ); }); this.irc.once("msg:preview", function(data) { expect(data.preview.head).to.equal("404 image"); - expect(data.preview.link).to.equal("http://localhost:9002/thumb-404"); + expect(data.preview.link).to.equal("http://localhost:" + port + "/thumb-404"); expect(data.preview.thumb).to.be.empty; done(); }); }); it("should send image preview", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002/real-test-image.png", + text: "http://localhost:" + port + "/real-test-image.png", }); link(this.irc, this.network.channels[0], message); this.irc.once("msg:preview", function(data) { expect(data.preview.type).to.equal("image"); - expect(data.preview.link).to.equal("http://localhost:9002/real-test-image.png"); - expect(data.preview.thumb).to.equal("http://localhost:9002/real-test-image.png"); + expect(data.preview.link).to.equal("http://localhost:" + port + "/real-test-image.png"); + expect(data.preview.thumb).to.equal( + "http://localhost:" + port + "/real-test-image.png" + ); done(); }); }); it("should load multiple URLs found in messages", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002/one http://localhost:9002/two", + text: "http://localhost:" + port + "/one http://localhost:" + this.port + "/two", }); link(this.irc, this.network.channels[0], message); @@ -263,7 +294,7 @@ describe("Link plugin", function() { { body: "", head: "", - link: "http://localhost:9002/one", + link: "http://localhost:" + port + "/one", thumb: "", type: "loading", shown: true, @@ -271,7 +302,7 @@ describe("Link plugin", function() { { body: "", head: "", - link: "http://localhost:9002/two", + link: "http://localhost:" + port + "/two", thumb: "", type: "loading", shown: true, @@ -289,10 +320,10 @@ describe("Link plugin", function() { const previews = []; this.irc.on("msg:preview", function(data) { - if (data.preview.link === "http://localhost:9002/one") { + if (data.preview.link === "http://localhost:" + port + "/one") { expect(data.preview.head).to.equal("first title"); previews[0] = data.preview; - } else if (data.preview.link === "http://localhost:9002/two") { + } else if (data.preview.link === "http://localhost:" + port + "/two") { expect(data.preview.head).to.equal("second title"); previews[1] = data.preview; } @@ -315,7 +346,7 @@ describe("Link plugin", function() { }); const message = this.irc.createMessage({ - text: "http://localhost:9002/language-check", + text: "http://localhost:" + this.port + "/language-check", }); link(this.irc, this.network.channels[0], message); @@ -331,16 +362,20 @@ describe("Link plugin", function() { }); const message = this.irc.createMessage({ - text: "http://localhost:9002/accept-header-html", + text: "http://localhost:" + this.port + "/accept-header-html", }); link(this.irc, this.network.channels[0], message); }); it("should send accept */* for meta image", function(done) { + const port = this.port; + app.get("/accept-header-thumb", function(req, res) { res.send( - "404 image" + "404 image" ); }); @@ -351,21 +386,22 @@ describe("Link plugin", function() { }); const message = this.irc.createMessage({ - text: "http://localhost:9002/accept-header-thumb", + text: "http://localhost:" + port + "/accept-header-thumb", }); link(this.irc, this.network.channels[0], message); }); it("should not add slash to url", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9002", + text: "http://localhost:" + port + "", }); link(this.irc, this.network.channels[0], message); this.irc.once("msg:preview", function(data) { - expect(data.preview.link).to.equal("http://localhost:9002"); + expect(data.preview.link).to.equal("http://localhost:" + port + ""); done(); }); }); @@ -373,12 +409,24 @@ describe("Link plugin", function() { it("should work on non-ASCII urls", function(done) { const message = this.irc.createMessage({ text: - "http://localhost:9002/unicode/ıoı-test " + - "http://localhost:9002/unicode/русский-текст-test " + - "http://localhost:9002/unicode/🙈-emoji-test " + - "http://localhost:9002/unicodeq/?q=ıoı-test " + - "http://localhost:9002/unicodeq/?q=русский-текст-test " + - "http://localhost:9002/unicodeq/?q=🙈-emoji-test", + "http://localhost:" + + this.port + + "/unicode/ıoı-test " + + "http://localhost:" + + this.port + + "/unicode/русский-текст-test " + + "http://localhost:" + + this.port + + "/unicode/🙈-emoji-test " + + "http://localhost:" + + this.port + + "/unicodeq/?q=ıoı-test " + + "http://localhost:" + + this.port + + "/unicodeq/?q=русский-текст-test " + + "http://localhost:" + + this.port + + "/unicodeq/?q=🙈-emoji-test", }); link(this.irc, this.network.channels[0], message); @@ -414,21 +462,30 @@ describe("Link plugin", function() { }); it("should fetch protocol-aware links", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "//localhost:9002", + text: "//localhost:" + port + "", }); link(this.irc, this.network.channels[0], message); this.irc.once("msg:preview", function(data) { - expect(data.preview.link).to.equal("http://localhost:9002"); + expect(data.preview.link).to.equal("http://localhost:" + port + ""); done(); }); }); it("should de-duplicate links", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "//localhost:9002 http://localhost:9002 http://localhost:9002", + text: + "//localhost:" + + port + + " http://localhost:" + + port + + " http://localhost:" + + port + + "", }); link(this.irc, this.network.channels[0], message); @@ -439,13 +496,13 @@ describe("Link plugin", function() { head: "", body: "", thumb: "", - link: "http://localhost:9002", + link: "http://localhost:" + port + "", shown: true, }, ]); this.irc.once("msg:preview", function(data) { - expect(data.preview.link).to.equal("http://localhost:9002"); + expect(data.preview.link).to.equal("http://localhost:" + port + ""); done(); }); }); @@ -469,7 +526,7 @@ describe("Link plugin", function() { it("should fetch same link only once at the same time", function(done) { const message = this.irc.createMessage({ - text: "http://localhost:9002/basic-og-once", + text: "http://localhost:" + this.port + "/basic-og-once", }); let requests = 0; @@ -509,7 +566,7 @@ describe("Link plugin", function() { it("should fetch same link with different languages multiple times", function(done) { const message = this.irc.createMessage({ - text: "http://localhost:9002/basic-og-once-lang", + text: "http://localhost:" + this.port + "/basic-og-once-lang", }); const requests = []; diff --git a/test/plugins/storage.js b/test/plugins/storage.js index c50f970d..9b1f9519 100644 --- a/test/plugins/storage.js +++ b/test/plugins/storage.js @@ -39,7 +39,10 @@ describe("Image storage", function() { this.app.get("/logo.svg", function(req, res) { res.sendFile(testSvgPath); }); - this.connection = this.app.listen(9003, done); + this.connection = this.app.listen(0, () => { + this.port = this.connection.address().port; + done(); + }); }); after(function(done) { @@ -54,49 +57,56 @@ describe("Image storage", function() { }); it("should store the thumbnail", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9003/thumb", + text: "http://localhost:" + port + "/thumb", }); link(this.irc, this.network.channels[0], message); this.app.get("/thumb", function(req, res) { res.send( - "Google" + "Google" ); }); this.irc.once("msg:preview", function(data) { expect(data.preview.head).to.equal("Google"); - expect(data.preview.link).to.equal("http://localhost:9003/thumb"); + expect(data.preview.link).to.equal("http://localhost:" + port + "/thumb"); expect(data.preview.thumb).to.equal(correctImageURL); done(); }); }); it("should store the image", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9003/real-test-image.png", + text: "http://localhost:" + port + "/real-test-image.png", }); link(this.irc, this.network.channels[0], message); this.irc.once("msg:preview", function(data) { expect(data.preview.type).to.equal("image"); - expect(data.preview.link).to.equal("http://localhost:9003/real-test-image.png"); + expect(data.preview.link).to.equal("http://localhost:" + port + "/real-test-image.png"); expect(data.preview.thumb).to.equal(correctImageURL); done(); }); }); it("should lookup correct extension type", function(done) { + const port = this.port; const message = this.irc.createMessage({ - text: "http://localhost:9003/svg-preview", + text: "http://localhost:" + port + "/svg-preview", }); this.app.get("/svg-preview", function(req, res) { res.send( - "test title" + "test title" ); }); @@ -104,7 +114,7 @@ describe("Image storage", function() { this.irc.once("msg:preview", function(data) { expect(data.preview.type).to.equal("link"); - expect(data.preview.link).to.equal("http://localhost:9003/svg-preview"); + expect(data.preview.link).to.equal("http://localhost:" + port + "/svg-preview"); expect(data.preview.thumb).to.equal(correctSvgURL); done(); });