Skip to content

Commit 113e099

Browse files
committed
Add links to the homepages of the various stacks to the web page
1 parent 7d3209a commit 113e099

6 files changed

+49
-23
lines changed

implementations.json

+26-13
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,67 @@
11
{
22
"quic-go": {
3-
"url": "martenseemann/quic-go-interop:latest",
3+
"image": "martenseemann/quic-go-interop:latest",
4+
"url": "https://github.com/lucas-clemente/quic-go",
45
"role": "both"
56
},
67
"quicly": {
7-
"url": "h2oserver/quicly-interop-runner:latest",
8+
"image": "h2oserver/quicly-interop-runner:latest",
9+
"url": "https://github.com/h2o/quicly",
810
"role": "both"
911
},
1012
"ngtcp2": {
11-
"url": "ghcr.io/ngtcp2/ngtcp2-interop:latest",
13+
"image": "ghcr.io/ngtcp2/ngtcp2-interop:latest",
14+
"url": "https://github.com/ngtcp2/ngtcp2",
1215
"role": "both"
1316
},
1417
"quant": {
15-
"url": "ntap/quant:interop",
18+
"image": "ntap/quant:interop",
19+
"url": "https://github.com/NTAP/quant",
1620
"role": "both"
1721
},
1822
"mvfst": {
19-
"url": "lnicco/mvfst-qns:latest",
23+
"image": "lnicco/mvfst-qns:latest",
24+
"url": "https://github.com/facebookincubator/mvfst",
2025
"role": "both"
2126
},
2227
"quiche": {
23-
"url": "cloudflare/quiche-qns:latest",
28+
"image": "cloudflare/quiche-qns:latest",
29+
"url": "https://github.com/cloudflare/quiche",
2430
"role": "both"
2531
},
2632
"kwik": {
27-
"url": "peterdoornbosch/kwik_n_flupke-interop",
33+
"image": "peterdoornbosch/kwik_n_flupke-interop",
34+
"url": "https://github.com/ptrd/kwik",
2835
"role": "client"
2936
},
3037
"picoquic": {
31-
"url": "privateoctopus/picoquic:latest",
38+
"image": "privateoctopus/picoquic:latest",
39+
"url": "https://github.com/private-octopus/picoquic",
3240
"role": "both"
3341
},
3442
"aioquic": {
35-
"url": "aiortc/aioquic-qns:latest",
43+
"image": "aiortc/aioquic-qns:latest",
44+
"url": "https://github.com/aiortc/aioquic",
3645
"role": "both"
3746
},
3847
"neqo": {
39-
"url": "neqoquic/neqo-qns:latest",
48+
"image": "neqoquic/neqo-qns:latest",
49+
"url": "https://github.com/mozilla/neqo",
4050
"role": "both"
4151
},
4252
"nginx": {
43-
"url": "nginx/nginx-quic-qns:latest",
53+
"image": "nginx/nginx-quic-qns:latest",
54+
"url": "https://quic.nginx.org/",
4455
"role": "server"
4556
},
4657
"msquic": {
47-
"url": "mcr.microsoft.com/msquic/qns:latest",
58+
"image": "mcr.microsoft.com/msquic/qns:latest",
59+
"url": "https://github.com/microsoft/msquic",
4860
"role": "both"
4961
},
5062
"pquic": {
51-
"url": "pquic/pquic-interop:latest",
63+
"image": "pquic/pquic-interop:latest",
64+
"url": "https://pquic.org/",
5265
"role": "both"
5366
}
5467
}

implementations.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Role(Enum):
1313
with open("implementations.json", "r") as f:
1414
data = json.load(f)
1515
for name, val in data.items():
16-
IMPLEMENTATIONS[name] = {"url": val["url"]}
16+
IMPLEMENTATIONS[name] = {"image": val["image"], "url": val["url"]}
1717
role = val["role"]
1818
if role == "server":
1919
IMPLEMENTATIONS[name]["role"] = Role.SERVER

interop.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def _check_impl_is_compliant(self, name: str) -> bool:
125125
"WWW=" + www_dir.name + " "
126126
"DOWNLOADS=" + downloads_dir.name + " "
127127
'SCENARIO="simple-p2p --delay=15ms --bandwidth=10Mbps --queue=25" '
128-
"CLIENT=" + self._implementations[name] + " "
128+
"CLIENT=" + self._implementations[name]["image"] + " "
129129
"docker-compose up --timeout 0 --abort-on-container-exit -V sim client"
130130
)
131131
output = subprocess.run(
@@ -147,7 +147,7 @@ def _check_impl_is_compliant(self, name: str) -> bool:
147147
"CLIENT_LOGS=/dev/null "
148148
"WWW=" + www_dir.name + " "
149149
"DOWNLOADS=" + downloads_dir.name + " "
150-
"SERVER=" + self._implementations[name] + " "
150+
"SERVER=" + self._implementations[name]["image"] + " "
151151
"docker-compose up -V server"
152152
)
153153
output = subprocess.run(
@@ -221,13 +221,13 @@ def get_letters(result):
221221
def _export_results(self):
222222
if not self._output:
223223
return
224-
225224
out = {
226225
"start_time": self._start_time.timestamp(),
227226
"end_time": datetime.now().timestamp(),
228227
"log_dir": self._log_dir,
229228
"servers": [name for name in self._servers],
230229
"clients": [name for name in self._clients],
230+
"urls": {x: self._implementations[x]["url"] for x in self._implementations},
231231
"tests": {
232232
x.abbreviation(): {
233233
"name": x.name(),
@@ -339,8 +339,8 @@ def _run_test(
339339
"SERVER_LOGS=" + server_log_dir.name + " "
340340
"CLIENT_LOGS=" + client_log_dir.name + " "
341341
'SCENARIO="{}" '
342-
"CLIENT=" + self._implementations[client] + " "
343-
"SERVER=" + self._implementations[server] + " "
342+
"CLIENT=" + self._implementations[client]["image"] + " "
343+
"SERVER=" + self._implementations[server]["image"] + " "
344344
'REQUESTS="' + reqs + '" '
345345
).format(testcase.scenario())
346346
params += " ".join(testcase.additional_envs())
@@ -455,9 +455,9 @@ def run(self):
455455
logging.debug(
456456
"Running with server %s (%s) and client %s (%s)",
457457
server,
458-
self._implementations[server],
458+
self._implementations[server]["image"],
459459
client,
460-
self._implementations[client],
460+
self._implementations[client]["image"],
461461
)
462462
if not (
463463
self._check_impl_is_compliant(server)

pull.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ def get_args():
2828

2929
for name, value in implementations.items():
3030
print("\nPulling " + name + "...")
31-
os.system("docker pull " + value["url"])
31+
os.system("docker pull " + value["image"])

run.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
from interop import InteropRunner
1010
from testcases import MEASUREMENTS, TESTCASES
1111

12-
implementations = {name: value["url"] for name, value in IMPLEMENTATIONS.items()}
12+
implementations = {
13+
name: {"image": value["image"], "url": value["url"]}
14+
for name, value in IMPLEMENTATIONS.items()
15+
}
1316
client_implementations = [
1417
name
1518
for name, value in IMPLEMENTATIONS.items()

web/script.js

+10
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@
2727
return a;
2828
}
2929

30+
function makeClickable(e, url) {
31+
e.title = url;
32+
$(e).attr("role", "button").attr("data-href", url).attr("data-toggle", "tooltip").tooltip();
33+
e.onclick = function(e) { window.open(e.target.getAttribute("data-href")); };
34+
}
35+
3036
function makeColumnHeaders(t, result) {
3137
var thead = t.createTHead();
3238
var row = thead.insertRow(0);
@@ -39,6 +45,8 @@
3945
row.appendChild(cell);
4046
cell.scope = "col";
4147
cell.className = "table-light server-" + result.servers[i];
48+
if (result.hasOwnProperty("urls"))
49+
makeClickable(cell, result.urls[result.servers[i]]);
4250
cell.innerHTML = result.servers[i];
4351
}
4452
}
@@ -48,6 +56,8 @@
4856
var cell = document.createElement("th");
4957
cell.scope = "row";
5058
cell.className = "table-light client-" + result.clients[i];
59+
if (result.hasOwnProperty("urls"))
60+
makeClickable(cell, result.urls[result.clients[i]]);
5161
cell.innerHTML = result.clients[i];
5262
row.appendChild(cell);
5363
return row;

0 commit comments

Comments
 (0)