AB#2644 Fetch measurements from CDN (#653)

* Fetch measurements from CDN

* Perform metadata validation on fetched measurements

* Remove deprecated public bucket

Signed-off-by: Daniel Weiße <dw@edgeless.systems>
This commit is contained in:
Daniel Weiße 2022-11-28 10:27:33 +01:00 committed by GitHub
parent c978329839
commit d52f3db2a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 406 additions and 144 deletions

View file

@ -44,6 +44,21 @@ func (p *Provider) UnmarshalJSON(b []byte) error {
return nil
}
// MarshalYAML marshals the Provider to YAML string.
func (p Provider) MarshalYAML() (interface{}, error) {
return p.String(), nil
}
// UnmarshalYAML unmarshals the Provider from YAML string.
func (p *Provider) UnmarshalYAML(unmarshal func(any) error) error {
var s string
if err := unmarshal(&s); err != nil {
return err
}
*p = FromString(s)
return nil
}
// FromString returns cloud provider from string.
func FromString(s string) Provider {
s = strings.ToLower(s)

View file

@ -7,9 +7,11 @@ SPDX-License-Identifier: AGPL-3.0-only
package cloudprovider
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
)
func TestMarshalJSON(t *testing.T) {
@ -43,7 +45,7 @@ func TestMarshalJSON(t *testing.T) {
t.Run(name, func(t *testing.T) {
assert := assert.New(t)
b, err := tc.input.MarshalJSON()
b, err := json.Marshal(tc.input)
assert.NoError(err)
assert.Equal(tc.want, b)
@ -88,7 +90,95 @@ func TestUnmarshalJSON(t *testing.T) {
assert := assert.New(t)
var p Provider
err := p.UnmarshalJSON(tc.input)
err := json.Unmarshal(tc.input, &p)
if tc.wantErr {
assert.Error(err)
} else {
assert.NoError(err)
assert.Equal(tc.want, p)
}
})
}
}
func TestMarshalYAML(t *testing.T) {
testCases := map[string]struct {
input Provider
want []byte
}{
"unknown": {
input: Unknown,
want: []byte("Unknown\n"),
},
"aws": {
input: AWS,
want: []byte("AWS\n"),
},
"azure": {
input: Azure,
want: []byte("Azure\n"),
},
"gcp": {
input: GCP,
want: []byte("GCP\n"),
},
"qemu": {
input: QEMU,
want: []byte("QEMU\n"),
},
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
assert := assert.New(t)
b, err := yaml.Marshal(tc.input)
assert.NoError(err)
assert.Equal(tc.want, b)
})
}
}
func TestUnmarshalYAML(t *testing.T) {
testCases := map[string]struct {
input []byte
want Provider
wantErr bool
}{
"empty": {
input: []byte("foo: bar\n"),
wantErr: true,
},
"unknown": {
input: []byte("unknown\n"),
want: Unknown,
},
"aws": {
input: []byte("aws\n"),
want: AWS,
},
"azure": {
input: []byte("azure\n"),
want: Azure,
},
"gcp": {
input: []byte("gcp\n"),
want: GCP,
},
"qemu": {
input: []byte("qemu\n"),
want: QEMU,
},
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
assert := assert.New(t)
var p Provider
err := yaml.Unmarshal(tc.input, &p)
if tc.wantErr {
assert.Error(err)