Skip to content

Commit

Permalink
Inte2e (Azure#3)
Browse files Browse the repository at this point in the history
* Wait for 6 hours before calling billing e2e
* Use builddefinition ID instead of builddefinition name
* Use var parameters in TriggerBuild
  • Loading branch information
Zhuoli committed Apr 22, 2020
1 parent 7c01802 commit c6e5410
Show file tree
Hide file tree
Showing 8 changed files with 170 additions and 43 deletions.
6 changes: 3 additions & 3 deletions .pipelines/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,16 @@ stages:
- task: TriggerBuild@3
inputs:
definitionIsInCurrentTeamProject: true
buildDefinition: 'Billing - E2E'
buildDefinition: $(BillingE2EPipelineName)
queueBuildForUserThatTriggeredBuild: true
ignoreSslCertificateErrors: false
useSameSourceVersion: false
useCustomSourceVersion: false
useSameBranch: false
branchToUse: 'master'
branchToUse: $(BillingE2EBranchName)
waitForQueuedBuildsToFinish: true
storeInEnvironmentVariable: false
delayBetweenBuilds: '14400'
delayBetweenBuilds: '21600'
buildParameters: 'CLUSTER_RESOURCEGROUP:$(CLUSTER_RESOURCEGROUP), CLUSTER:$(CLUSTER), REGION:$(REGION)'
authenticationMethod: 'OAuth Token'
password: '$(System.AccessToken)'
Expand Down
20 changes: 1 addition & 19 deletions cmd/aro/mirror.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"github.com/sirupsen/logrus"

pkgmirror "github.com/Azure/ARO-RP/pkg/mirror"
"github.com/Azure/ARO-RP/pkg/util/version"
)

func getAuth(key string) (*types.DockerAuthConfig, error) {
Expand Down Expand Up @@ -59,28 +58,11 @@ func mirror(ctx context.Context, log *logrus.Entry) error {
}

log.Print("reading Cincinnati graph")
releases, err := pkgmirror.AddFromGraph("stable", pkgmirror.Version{4, 3})
releases, err := pkgmirror.AddFromGraph(pkgmirror.NewVersion(4, 3), pkgmirror.NewVersion(4, 4))
if err != nil {
return err
}

// ensure we mirror the version at which we are creating clusters, even if
// it isn't in the Cincinnati graph yet
var found bool
for _, release := range releases {
if release.Version == version.OpenShiftVersion {
found = true
break
}
}

if !found {
releases = append(releases, pkgmirror.Node{
Version: version.OpenShiftVersion,
Payload: version.OpenShiftPullSpec,
})
}

var errorOccurred bool
for _, release := range releases {
log.Printf("mirroring release %s", release.Version)
Expand Down
2 changes: 1 addition & 1 deletion deploy/env-development.json
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@
"autoUpgradeMinorVersion": true,
"settings": {},
"protectedSettings": {
"script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'PROXYIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('proxyImage')),''')\n','PROXYIMAGEAUTH=$(base64 -d \u003c\u003c\u003c''',base64(parameters('proxyImageAuth')),''')\n','PROXYCERT=''',parameters('proxyCert'),'''\n','PROXYCLIENTCERT=''',parameters('proxyClientCert'),'''\n','PROXYKEY=''',parameters('proxyKey'),'''\n','\n',base64ToString('eXVtIC15IHVwZGF0ZSAteCBXQUxpbnV4QWdlbnQKCnl1bSAteSBpbnN0YWxsIGRvY2tlcgoKZmlyZXdhbGwtY21kIC0tYWRkLXBvcnQ9NDQzL3RjcCAtLXBlcm1hbmVudAoKbWtkaXIgL3Jvb3QvLmRvY2tlcgpjYXQgPi9yb290Ly5kb2NrZXIvY29uZmlnLmpzb24gPDxFT0YKewoJImF1dGhzIjogewoJCSIke1BST1hZSU1BR0UlJS8qfSI6IHsKCQkJImF1dGgiOiAiJFBST1hZSU1BR0VBVVRIIgoJCX0KCX0KfQpFT0YKCm1rZGlyIC9ldGMvcHJveHkKYmFzZTY0IC1kIDw8PCIkUFJPWFlDRVJUIiA+L2V0Yy9wcm94eS9wcm94eS5jcnQKYmFzZTY0IC1kIDw8PCIkUFJPWFlLRVkiID4vZXRjL3Byb3h5L3Byb3h5LmtleQpiYXNlNjQgLWQgPDw8IiRQUk9YWUNMSUVOVENFUlQiID4vZXRjL3Byb3h5L3Byb3h5LWNsaWVudC5jcnQKY2hvd24gLVIgMTAwMDoxMDAwIC9ldGMvcHJveHkKY2htb2QgMDYwMCAvZXRjL3Byb3h5L3Byb3h5LmtleQoKY2F0ID4vZXRjL3N5c2NvbmZpZy9wcm94eSA8PEVPRgpQUk9YWV9JTUFHRT0nJFBST1hZSU1BR0UnCkVPRgoKY2F0ID4vZXRjL3N5c3RlbWQvc3lzdGVtL3Byb3h5LnNlcnZpY2UgPDxFT0YKW1VuaXRdCkFmdGVyPWRvY2tlci5zZXJ2aWNlClJlcXVpcmVzPWRvY2tlci5zZXJ2aWNlCgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL3Byb3h5CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vZG9ja2VyIHJtIC1mICVuCkV4ZWNTdGFydFByZT0vdXNyL2Jpbi9kb2NrZXIgcHVsbCBcJFBST1hZX0lNQUdFCkV4ZWNTdGFydD0vdXNyL2Jpbi9kb2NrZXIgcnVuIC0tcm0gLS1uYW1lICVuIC1wIDQ0Mzo4NDQzIC12IC9ldGMvcHJveHk6L3NlY3JldHMgXCRQUk9YWV9JTUFHRQpFeGVjU3RvcD0vdXNyL2Jpbi9kb2NrZXIgc3RvcCAlbgpSZXN0YXJ0PWFsd2F5cwoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CkVPRgoKc3lzdGVtY3RsIGVuYWJsZSBwcm94eS5zZXJ2aWNlCgooc2xlZXAgMzA7IHJlYm9vdCkgJgo=')))]"
"script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'PROXYIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('proxyImage')),''')\n','PROXYIMAGEAUTH=$(base64 -d \u003c\u003c\u003c''',base64(parameters('proxyImageAuth')),''')\n','PROXYCERT=''',parameters('proxyCert'),'''\n','PROXYCLIENTCERT=''',parameters('proxyClientCert'),'''\n','PROXYKEY=''',parameters('proxyKey'),'''\n','\n',base64ToString('CmlmIFtbICIkTE9DQVRJT04iID09IHNvdXRoZWFzdGFzaWEgXV07IHRoZW4KCWVjaG8gIiQoZGlnICtzaG9ydCBhdXN0cmFsaWFlYXN0LWNkcy5hdXN0cmFsaWFlYXN0LmNsb3VkYXBwLmF6dXJlLmNvbSkgcmh1aS0xLm1pY3Jvc29mdC5jb20iID4+L2V0Yy9ob3N0cwpmaQoKeXVtIC15IHVwZGF0ZSAteCBXQUxpbnV4QWdlbnQKeXVtIC15IGluc3RhbGwgZG9ja2VyCgpmaXJld2FsbC1jbWQgLS1hZGQtcG9ydD00NDMvdGNwIC0tcGVybWFuZW50Cgpta2RpciAvcm9vdC8uZG9ja2VyCmNhdCA+L3Jvb3QvLmRvY2tlci9jb25maWcuanNvbiA8PEVPRgp7CgkiYXV0aHMiOiB7CgkJIiR7UFJPWFlJTUFHRSUlLyp9IjogewoJCQkiYXV0aCI6ICIkUFJPWFlJTUFHRUFVVEgiCgkJfQoJfQp9CkVPRgoKbWtkaXIgL2V0Yy9wcm94eQpiYXNlNjQgLWQgPDw8IiRQUk9YWUNFUlQiID4vZXRjL3Byb3h5L3Byb3h5LmNydApiYXNlNjQgLWQgPDw8IiRQUk9YWUtFWSIgPi9ldGMvcHJveHkvcHJveHkua2V5CmJhc2U2NCAtZCA8PDwiJFBST1hZQ0xJRU5UQ0VSVCIgPi9ldGMvcHJveHkvcHJveHktY2xpZW50LmNydApjaG93biAtUiAxMDAwOjEwMDAgL2V0Yy9wcm94eQpjaG1vZCAwNjAwIC9ldGMvcHJveHkvcHJveHkua2V5CgpjYXQgPi9ldGMvc3lzY29uZmlnL3Byb3h5IDw8RU9GClBST1hZX0lNQUdFPSckUFJPWFlJTUFHRScKRU9GCgpjYXQgPi9ldGMvc3lzdGVtZC9zeXN0ZW0vcHJveHkuc2VydmljZSA8PEVPRgpbVW5pdF0KQWZ0ZXI9ZG9ja2VyLnNlcnZpY2UKUmVxdWlyZXM9ZG9ja2VyLnNlcnZpY2UKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvcHJveHkKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9kb2NrZXIgcm0gLWYgJW4KRXhlY1N0YXJ0UHJlPS91c3IvYmluL2RvY2tlciBwdWxsIFwkUFJPWFlfSU1BR0UKRXhlY1N0YXJ0PS91c3IvYmluL2RvY2tlciBydW4gLS1ybSAtLW5hbWUgJW4gLXAgNDQzOjg0NDMgLXYgL2V0Yy9wcm94eTovc2VjcmV0cyBcJFBST1hZX0lNQUdFCkV4ZWNTdG9wPS91c3IvYmluL2RvY2tlciBzdG9wICVuClJlc3RhcnQ9YWx3YXlzCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKRU9GCgpzeXN0ZW1jdGwgZW5hYmxlIHByb3h5LnNlcnZpY2UKCihzbGVlcCAzMDsgcmVib290KSAmCg==')))]"
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/deploy/bindata.go

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion pkg/deploy/generator/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,12 @@ func (g *generator) proxyVmss() *arm.Resource {
)
}

trailer := base64.StdEncoding.EncodeToString([]byte(`yum -y update -x WALinuxAgent
trailer := base64.StdEncoding.EncodeToString([]byte(`
if [[ "$LOCATION" == southeastasia ]]; then
echo "$(dig +short australiaeast-cds.australiaeast.cloudapp.azure.com) rhui-1.microsoft.com" >>/etc/hosts
fi
yum -y update -x WALinuxAgent
yum -y install docker
firewall-cmd --add-port=443/tcp --permanent
Expand Down
27 changes: 15 additions & 12 deletions pkg/mirror/graph.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ package mirror
import (
"encoding/json"
"fmt"
"mime"
"net/http"
"net/url"
)

type Node struct {
Expand All @@ -16,18 +16,14 @@ type Node struct {
Metadata map[string]interface{} `json:"metadata,omitempty"`
}

func AddFromGraph(channel string, min Version) ([]Node, error) {
req, err := http.NewRequest(http.MethodGet, "https://api.openshift.com/api/upgrades_info/v1/graph", nil)
// AddFromGraph adds all nodes whose version is of the form x.y.z (no suffix)
// and lies in the range [min, max)
func AddFromGraph(min, max *Version) ([]Node, error) {
req, err := http.NewRequest(http.MethodGet, "https://openshift-release.svc.ci.openshift.org/graph", nil)
if err != nil {
return nil, err
}

req.URL.RawQuery = url.Values{
"channel": []string{fmt.Sprintf("%s-%d.%d", channel, min[0], min[1])},
}.Encode()

req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
Expand All @@ -38,7 +34,12 @@ func AddFromGraph(channel string, min Version) ([]Node, error) {
return nil, fmt.Errorf("unexpected status code %d", resp.StatusCode)
}

if resp.Header.Get("Content-Type") != "application/json" {
mediaType, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type"))
if err != nil {
return nil, err
}

if mediaType != "application/vnd.redhat.cincinnati.graph+json" {
return nil, fmt.Errorf("unexpected content type %q", resp.Header.Get("Content-Type"))
}

Expand All @@ -54,12 +55,14 @@ func AddFromGraph(channel string, min Version) ([]Node, error) {

releases := make([]Node, 0, len(g.Nodes))
for _, node := range g.Nodes {
version, err := newVersion(node.Version)
version, err := ParseVersion(node.Version)
if err != nil {
return nil, err
}

if version.Lt(min) {
if version.Lt(min) ||
!version.Lt(max) ||
version.Suffix != "" {
continue
}

Expand Down
53 changes: 47 additions & 6 deletions pkg/mirror/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,56 @@ package mirror

import (
"fmt"
"regexp"
"strconv"
)

type Version [3]byte
var rxVersion = regexp.MustCompile(`^(\d+)\.(\d+)\.(\d+)(.*)`)

func newVersion(vsn string) (v Version, err error) {
_, err = fmt.Sscanf(vsn, "%d.%d.%d", &v[0], &v[1], &v[2])
return
type Version struct {
V [3]byte
Suffix string
}

func (v Version) Lt(w Version) bool {
return v[0] < w[0] || v[1] < w[1] || v[2] < w[2]
func NewVersion(vs ...byte) *Version {
v := &Version{}

copy(v.V[:], vs)

return v
}

func ParseVersion(vsn string) (*Version, error) {
m := rxVersion.FindStringSubmatch(vsn)
if m == nil {
return nil, fmt.Errorf("could not parse version %q", vsn)
}

v := &Version{
Suffix: m[4],
}

for i := 0; i < 3; i++ {
b, err := strconv.ParseUint(m[i+1], 10, 8)
if err != nil {
return nil, err
}

v.V[i] = byte(b)
}

return v, nil
}

func (v *Version) Lt(w *Version) bool {
for i := 0; i < 3; i++ {
switch {
case v.V[i] < w.V[i]:
return true
case v.V[i] > w.V[i]:
return false
}
}

return false
}
97 changes: 97 additions & 0 deletions pkg/mirror/version_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
package mirror

// Copyright (c) Microsoft Corporation.
// Licensed under the Apache License 2.0.

import (
"reflect"
"strconv"
"testing"
)

func TestNewVersion(t *testing.T) {
for i, tt := range []struct {
vs []byte
want *Version
}{
{
vs: []byte{1, 2},
want: &Version{V: [3]byte{1, 2}},
},
{
want: &Version{},
},
{
vs: []byte{1, 2, 3, 4},
want: &Version{V: [3]byte{1, 2, 3}},
},
} {
t.Run(strconv.Itoa(i), func(t *testing.T) {
got := NewVersion(tt.vs...)
if !reflect.DeepEqual(got, tt.want) {
t.Error(got)
}
})
}
}

func TestParseVersion(t *testing.T) {
for _, tt := range []struct {
vsn string
want *Version
wantErr string
}{
{
vsn: "4.3.0-0.nightly-2020-04-17-062811",
want: &Version{V: [3]byte{4, 3}, Suffix: "-0.nightly-2020-04-17-062811"},
},
{
vsn: "40.30.10",
want: &Version{V: [3]byte{40, 30, 10}},
},
{
vsn: "bad",
wantErr: `could not parse version "bad"`,
},
} {
t.Run(tt.vsn, func(t *testing.T) {
got, err := ParseVersion(tt.vsn)
if err != nil && err.Error() != tt.wantErr ||
err == nil && tt.wantErr != "" {
t.Error(err)
}
if !reflect.DeepEqual(got, tt.want) {
t.Error(got)
}
})
}
}

func TestLt(t *testing.T) {
for i, tt := range []struct {
a *Version
b *Version
want bool
}{
{
a: NewVersion(4, 1),
b: NewVersion(4, 3),
want: true,
},
{
a: NewVersion(4, 4),
b: NewVersion(4, 3, 1),
},
{
a: NewVersion(4, 4),
b: NewVersion(4, 4),
},
} {
t.Run(strconv.Itoa(i), func(t *testing.T) {
got := tt.a.Lt(tt.b)
if got != tt.want {
t.Error(got)
}
})
}
}

0 comments on commit c6e5410

Please sign in to comment.