1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
"use strict";
const { ExperimentManager } = ChromeUtils.import(
"resource://nimbus/lib/ExperimentManager.jsm"
);
const TEST_CONFIG = {
slug: "test-experiment",
branches: [
{
slug: "control",
ratio: 1,
},
{
slug: "branchA",
ratio: 1,
},
{
slug: "branchB",
ratio: 1,
},
],
namespace: "test-namespace",
start: 0,
count: 2000,
total: 10000,
};
add_task(async function test_generateTestIds() {
let result = await ExperimentManager.generateTestIds(TEST_CONFIG);
Assert.ok(result, "should return object");
Assert.ok(result.notInExperiment, "should have a id for no experiment");
Assert.ok(result.control, "should have id for control");
Assert.ok(result.branchA, "should have id for branchA");
Assert.ok(result.branchB, "should have id for branchB");
});
add_task(async function test_generateTestIds_input_errors() {
const { slug, branches, namespace, start, count, total } = TEST_CONFIG;
await Assert.rejects(
ExperimentManager.generateTestIds({
branches,
namespace,
start,
count,
total,
}),
/slug, namespace not in expected format/,
"should throw because of missing slug"
);
await Assert.rejects(
ExperimentManager.generateTestIds({ slug, branches, start, count, total }),
/slug, namespace not in expected format/,
"should throw because of missing namespace"
);
await Assert.rejects(
ExperimentManager.generateTestIds({
slug,
branches,
namespace,
count,
total,
}),
/Must include start, count, and total as integers/,
"should throw beause of missing start"
);
await Assert.rejects(
ExperimentManager.generateTestIds({
slug,
branches,
namespace,
start,
total,
}),
/Must include start, count, and total as integers/,
"should throw beause of missing count"
);
await Assert.rejects(
ExperimentManager.generateTestIds({
slug,
branches,
namespace,
count,
start,
}),
/Must include start, count, and total as integers/,
"should throw beause of missing total"
);
// Intentionally misspelled slug
let invalidBranches = [
{ slug: "a", ratio: 1 },
{ slugG: "b", ratio: 1 },
];
await Assert.rejects(
ExperimentManager.generateTestIds({
slug,
branches: invalidBranches,
namespace,
start,
count,
total,
}),
/branches parameter not in expected format/,
"should throw because of invalid format for branches"
);
});
|