瀏覽代碼

Merge branch 'master' into cbor-msgpack

Jonas Gloning 1 年之前
父節點
當前提交
64c85fc695
共有 7 個文件被更改,包括 478 次插入261 次删除
  1. 34 0
      e2e/peer/disconnected.html
  2. 56 0
      e2e/peer/id-taken.html
  3. 26 0
      e2e/peer/peer.page.ts
  4. 20 0
      e2e/peer/peer.spec.ts
  5. 31 0
      e2e/peer/server-unavailable.html
  6. 310 260
      package-lock.json
  7. 1 1
      package.json

+ 34 - 0
e2e/peer/disconnected.html

@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta charset="UTF-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<title></title>
+		<link rel="stylesheet" href="../style.css" />
+	</head>
+	<body>
+		<h1>ID-TAKEN</h1>
+		<div id="messages"></div>
+		<div id="error-message"></div>
+		<script src="/dist/peerjs.js"></script>
+		<script type="application/javascript">
+			/**
+			 * @type {typeof import("../..").Peer}
+			 */
+			const Peer = window.peerjs.Peer;
+
+			const messages = document.getElementById("messages");
+
+			const peer = new Peer();
+			peer
+				.once(
+					"error",
+					(error) => void (messages.textContent = JSON.stringify(error)),
+				)
+				.once("open", (id) => {
+					peer.disconnect();
+					peer.connect("otherid");
+				});
+		</script>
+	</body>
+</html>

+ 56 - 0
e2e/peer/id-taken.html

@@ -0,0 +1,56 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta charset="UTF-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<title></title>
+		<link rel="stylesheet" href="../style.css" />
+	</head>
+	<body>
+		<h1>ID-TAKEN</h1>
+		<div id="messages"></div>
+		<div id="error-message"></div>
+		<script src="/dist/peerjs.js"></script>
+		<script type="application/javascript">
+			/**
+			 * @type {typeof import("../..").Peer}
+			 */
+			const Peer = window.peerjs.Peer;
+
+			const messages = document.getElementById("messages");
+			const errorMessage = document.getElementById("error-message");
+
+			// Peer A should be created without an error
+			const peerA = new Peer()
+				.once(
+					"error",
+					(err) => (errorMessage.textContent += JSON.stringify(err)),
+				)
+				.once("open", (id) => {
+					// Create 10 new `Peer`s that will try to steel A's id
+					let peers_try_to_take = Array.from(
+						{ length: 10 },
+						(_, i) =>
+							new Promise((resolve, reject) =>
+								new Peer(id)
+									.once("open", () =>
+										reject(`Peer ${i} failed! Connection got established.`),
+									)
+									.once("error", (error) => {
+										if (error.type === "unavailable-id") {
+											resolve(`ID already taken. (${i})`);
+										} else {
+											reject(error);
+										}
+									}),
+							),
+					);
+					Promise.all(peers_try_to_take)
+						.then(() => (messages.textContent = "No ID takeover"))
+						.catch(
+							(error) => (errorMessage.textContent += JSON.stringify(error)),
+						);
+				});
+		</script>
+	</body>
+</html>

+ 26 - 0
e2e/peer/peer.page.ts

@@ -0,0 +1,26 @@
+import { browser, $ } from "@wdio/globals";
+class PeerPage {
+	get messages() {
+		return $("div[id='messages']");
+	}
+
+	get errorMessage() {
+		return $("div[id='error-message']");
+	}
+
+	waitForMessage(right: string) {
+		return browser.waitUntil(
+			async () => {
+				const messages = await this.messages.getText();
+				return messages.startsWith(right);
+			},
+			{ timeoutMsg: `Expected message to start with ${right}`, timeout: 10000 },
+		);
+	}
+
+	async open(test: string) {
+		await browser.url(`/e2e/peer/${test}.html`);
+	}
+}
+
+export default new PeerPage();

+ 20 - 0
e2e/peer/peer.spec.ts

@@ -0,0 +1,20 @@
+import P from "./peer.page.js";
+import { browser, expect } from "@wdio/globals";
+
+describe("Peer", () => {
+	it("should emit an error, when the ID is already taken", async () => {
+		await P.open("id-taken");
+		await P.waitForMessage("No ID takeover");
+		expect(await P.errorMessage.getText()).toBe("");
+	});
+	it("should emit an error, when the server is unavailable", async () => {
+		await P.open("server-unavailable");
+		await P.waitForMessage('{"type":"server-error"}');
+		expect(await P.errorMessage.getText()).toBe("");
+	});
+	it("should emit an error, when it got disconnected from the server", async () => {
+		await P.open("disconnected");
+		await P.waitForMessage('{"type":"disconnected"}');
+		expect(await P.errorMessage.getText()).toBe("");
+	});
+});

+ 31 - 0
e2e/peer/server-unavailable.html

@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta charset="UTF-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<title></title>
+		<link rel="stylesheet" href="../style.css" />
+	</head>
+	<body>
+		<h1>ID-TAKEN</h1>
+		<div id="messages"></div>
+		<div id="error-message"></div>
+		<script src="/dist/peerjs.js"></script>
+		<script type="application/javascript">
+			/**
+			 * @type {typeof import("../..").Peer}
+			 */
+			const Peer = window.peerjs.Peer;
+
+			const messages = document.getElementById("messages");
+			const errorMessage = document.getElementById("error-message");
+
+			new Peer({
+				host: "thisserverwillneverexist.example.com",
+			}).once(
+				"error",
+				(error) => void (messages.textContent = JSON.stringify(error)),
+			);
+		</script>
+	</body>
+</html>

File diff suppressed because it is too large
+ 310 - 260
package-lock.json


+ 1 - 1
package.json

@@ -209,7 +209,7 @@
 		"mock-socket": "^9.0.0",
 		"parcel": "^2.9.3",
 		"prettier": "^3.0.0",
-		"semantic-release": "^20.0.0",
+		"semantic-release": "^21.0.0",
 		"ts-node": "^10.9.1",
 		"typescript": "^5.0.0",
 		"wdio-geckodriver-service": "^5.0.1"

Some files were not shown because too many files changed in this diff