Skip to content

Commit 31ad986

Browse files
committed
Supporting platforms in JSON (fixes #8)
1 parent 02fe173 commit 31ad986

File tree

6 files changed

+63
-16
lines changed

6 files changed

+63
-16
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,16 @@ In **quota** section we define quota names, browser names, their versions and us
6565
"test-quota": {
6666
"firefox" : {
6767
"defaultVersion": "33.0",
68+
"defaultPlatform": "LINUX",
6869
"versions": {
6970
"33.0": "cloud",
70-
"42.0": "cloud"
71+
"42.0@LINUX": "cloud"
7172
}
7273
}
7374
}
7475
}
7576
```
76-
Here **test-quota** is free-form name of the quota, **firefox** is the browser name. Finally **versions** section contains a mapping of browser version to host group name, e.g. **firefox 33.0** will correspond to all hosts defined in **cloud** hosts group.
77+
To specify a platform use `@`-notation, e.g. `42.0@LINUX`. Here **test-quota** is free-form name of the quota, **firefox** is the browser name. Finally **versions** section contains a mapping of browser version to host group name, e.g. **firefox 33.0** will correspond to all hosts defined in **cloud** hosts group.
7778
In **aliases** section we define aliases for quota blocks from **quota** section. For each defined alias quota contents will be copied to a separate file with new name.
7879

7980
Cloud provider attributes `username` and `password` can be included in the input file:
@@ -90,4 +91,4 @@ Cloud provider attributes `username` and `password` can be included in the input
9091
}
9192
}
9293
}
93-
```
94+
```

cmd/data.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ type Hosts map[string]Regions
1616
type Versions map[string]string
1717

1818
type Browser struct {
19-
DefaultVersion string `json:"defaultVersion"`
20-
Versions Versions `json:"versions"`
19+
DefaultVersion string `json:"defaultVersion"`
20+
DefaultPlatform string `json:"defaultPlatform"`
21+
Versions Versions `json:"versions"`
2122
}
2223

2324
type Quota map[string]Browser

cmd/generate.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"regexp"
1414
"sort"
1515
"strconv"
16+
"strings"
1617
)
1718

1819
const (
@@ -82,20 +83,25 @@ func createQuota(quotaName string, hostsMap Hosts, quota Quota) ggr.Browsers {
8283
for versionName, hostsRef := range browser.Versions {
8384
regions := hostsMap[hostsRef]
8485
if regions != nil {
86+
version, platform := parseVersionPlatform(versionName)
8587
xmlVersion := ggr.Version{
86-
Number: versionName,
88+
Number: version,
8789
Regions: jsonRegionsToXmlRegions(regions),
8890
}
91+
if platform != "" {
92+
xmlVersion.Platform = platform
93+
}
8994
xmlVersions = append(xmlVersions, xmlVersion)
9095
} else {
9196
fmt.Printf("Missing host reference %s for browser %s:%s:%s\n", hostsRef, quotaName, browserName, versionName)
9297
os.Exit(1)
9398
}
9499
}
95100
xmlBrowser := ggr.Browser{
96-
Name: browserName,
97-
DefaultVersion: browser.DefaultVersion,
98-
Versions: xmlVersions,
101+
Name: browserName,
102+
DefaultVersion: browser.DefaultVersion,
103+
DefaultPlatform: browser.DefaultPlatform,
104+
Versions: xmlVersions,
99105
}
100106
browsers = append(browsers, xmlBrowser)
101107
}
@@ -104,6 +110,15 @@ func createQuota(quotaName string, hostsMap Hosts, quota Quota) ggr.Browsers {
104110
}
105111
}
106112

113+
func parseVersionPlatform(s string) (string, string) {
114+
const separator = "@"
115+
pieces := strings.Split(s, separator)
116+
if len(pieces) > 1 {
117+
return pieces[0], strings.Join(pieces[1:], separator)
118+
}
119+
return s, ""
120+
}
121+
107122
func jsonRegionsToXmlRegions(regions Regions) []ggr.Region {
108123
var xmlRegions []ggr.Region
109124
for regionName, region := range regions {

cmd/generate_test.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,25 @@ func TestConvert(t *testing.T) {
3131
browser := browsers[0]
3232
AssertThat(t, browser.Name, EqualTo{"firefox"})
3333
AssertThat(t, browser.DefaultVersion, EqualTo{"33.0"})
34+
AssertThat(t, browser.DefaultPlatform, EqualTo{"LINUX"})
3435

3536
versions := browser.Versions
36-
AssertThat(t, len(versions), EqualTo{3})
37+
AssertThat(t, len(versions), EqualTo{4})
3738

3839
sort.Slice(versions, func(i, j int) bool {
3940
return versions[i].Number < versions[j].Number
4041
})
4142

4243
firstVersion := versions[0]
43-
AssertThat(t, firstVersion.Number == "33.0", Is{true})
44+
AssertThat(t, firstVersion.Number, EqualTo{"33.0"})
4445
secondVersion := versions[1]
45-
AssertThat(t, secondVersion.Number == "42.0", Is{true})
46+
AssertThat(t, secondVersion.Number, EqualTo{"42.0"})
4647
thirdVersion := versions[2]
47-
AssertThat(t, thirdVersion.Number == "43.0", Is{true})
48+
AssertThat(t, thirdVersion.Number, EqualTo{"43.0"})
49+
AssertThat(t, thirdVersion.Platform, EqualTo{"LINUX"})
50+
fourthVersion := versions[3]
51+
AssertThat(t, fourthVersion.Number, EqualTo{"43.0"})
52+
AssertThat(t, fourthVersion.Platform, EqualTo{"WINDOWS"})
4853

4954
firstRegions := firstVersion.Regions
5055
AssertThat(t, len(firstRegions), EqualTo{2})
@@ -80,3 +85,17 @@ func TestConvert(t *testing.T) {
8085
AssertThat(t, host.Password, EqualTo{"Password1"})
8186
}
8287
}
88+
89+
func TestParseVersionPlatform(t *testing.T) {
90+
v, p := parseVersionPlatform("some-string")
91+
AssertThat(t, v, EqualTo{"some-string"})
92+
AssertThat(t, p, EqualTo{""})
93+
94+
v, p = parseVersionPlatform("version@platform")
95+
AssertThat(t, v, EqualTo{"version"})
96+
AssertThat(t, p, EqualTo{"platform"})
97+
98+
v, p = parseVersionPlatform("version@platform@platform")
99+
AssertThat(t, v, EqualTo{"version"})
100+
AssertThat(t, p, EqualTo{"platform@platform"})
101+
}

test-data/input.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@
3030
"test-quota": {
3131
"firefox" : {
3232
"defaultVersion": "33.0",
33+
"defaultPlatform": "LINUX",
3334
"versions": {
3435
"33.0": "cloud",
3536
"42.0": "cloud",
36-
"43.0": "cloud-provider"
37+
"43.0@LINUX": "cloud-provider",
38+
"43.0@WINDOWS": "cloud-provider"
3739
}
3840
}
3941
}

test-data/output.xml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<qa:browsers xmlns:qa="urn:config.gridrouter.qatools.ru">
2-
<browser name="firefox" defaultVersion="33.0">
2+
<browser name="firefox" defaultVersion="33.0" defaultPlatform="LINUX">
33
<version number="33.0">
44
<region name="region-a">
55
<host name="selenium-cloud-a-1.example.com" port="4444" count="1"></host>
@@ -92,7 +92,16 @@
9292
<host name="selenium-cloud-b-20.example.com" port="4444" count="2"></host>
9393
</region>
9494
</version>
95-
<version number="43.0">
95+
<version number="43.0" platform="LINUX">
96+
<region name="provider-1">
97+
<host name="cloud-provider-1.com" port="4444" count="1" username="user1" password="Password1"></host>
98+
<host name="cloud-provider-2.com" port="4444" count="1" username="user1" password="Password1"></host>
99+
<host name="cloud-provider-3.com" port="4444" count="1" username="user1" password="Password1"></host>
100+
<host name="cloud-provider-4.com" port="4444" count="1" username="user1" password="Password1"></host>
101+
<host name="cloud-provider-5.com" port="4444" count="1" username="user1" password="Password1"></host>
102+
</region>
103+
</version>
104+
<version number="43.0" platform="WINDOWS">
96105
<region name="provider-1">
97106
<host name="cloud-provider-1.com" port="4444" count="1" username="user1" password="Password1"></host>
98107
<host name="cloud-provider-2.com" port="4444" count="1" username="user1" password="Password1"></host>

0 commit comments

Comments
 (0)