Skip to content

Commit

Permalink
Update pkg/v1/platform.go
Browse files Browse the repository at this point in the history
Co-authored-by: jonjohnsonjr <jonjohnson@google.com>
Signed-off-by: Avi Deitcher <avi@deitcher.net>
  • Loading branch information
deitch and jonjohnsonjr committed Nov 13, 2020
1 parent 8214a8a commit 8cd45e1
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 2 deletions.
35 changes: 35 additions & 0 deletions pkg/v1/match/match_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package match

import (
"testing"
)

func TestName(t *testing.T) {

}

func TestAnnotation(t *testing.T) {

}

func TestPlatform(t *testing.T) {

}

func TestMediaTypes(t *testing.T) {

}
17 changes: 15 additions & 2 deletions pkg/v1/platform.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@

package v1

import (
"sort"
)

// Platform represents the target os/arch for an image.
type Platform struct {
Architecture string `json:"architecture"`
Expand All @@ -26,9 +30,8 @@ type Platform struct {

// Equals returns true if another platform is equivalent to this one. It must have all of the fields be the same
func (p Platform) Equals(o Platform) bool {
// ignoring the Platform.Features and Platform.OSFeatures for now
return p.OS == o.OS && p.Architecture == o.Architecture && p.Variant == o.Variant && p.OSVersion == o.OSVersion &&
stringSliceEqual(p.OSFeatures, o.OSFeatures) && stringSliceEqual(p.Features, o.Features)
stringSliceEqualIgnoreOrder(p.OSFeatures, o.OSFeatures) && stringSliceEqualIgnoreOrder(p.Features, o.Features)
}

// stringSliceEqual compares 2 string slices and returns if their contents are identical.
Expand All @@ -43,3 +46,13 @@ func stringSliceEqual(a, b []string) bool {
}
return true
}

// stringSliceEqualIgnoreOrder compares 2 string slices and returns if their contents are identical, ignoring order
func stringSliceEqualIgnoreOrder(a, b []string) bool {
a1, b1 := a[:], b[:]
if a1 != nil && b1 != nil {
sort.Strings(a1)
sort.Strings(b1)
}
return stringSliceEqual(a1, b1)
}
62 changes: 62 additions & 0 deletions pkg/v1/platform_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1_test

import (
"testing"

v1 "github.com/google/go-containerregistry/pkg/v1"
)

/*
type Platform struct {
Architecture string `json:"architecture"`
OS string `json:"os"`
OSVersion string `json:"os.version,omitempty"`
OSFeatures []string `json:"os.features,omitempty"`
Variant string `json:"variant,omitempty"`
Features []string `json:"features,omitempty"`
}
*/
func TestPlatformEquals(t *testing.T) {
tests := []struct {
a v1.Platform
b v1.Platform
equal bool
}{
{v1.Platform{Architecture: "amd64", OS: "linux"}, v1.Platform{Architecture: "amd64", OS: "linux"}, true},
{v1.Platform{Architecture: "amd64", OS: "linux"}, v1.Platform{Architecture: "arm64", OS: "linux"}, false},
{v1.Platform{Architecture: "amd64", OS: "linux"}, v1.Platform{Architecture: "amd64", OS: "darwin"}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", OSVersion: "5.0"}, v1.Platform{Architecture: "amd64", OS: "linux"}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", OSVersion: "5.0"}, v1.Platform{Architecture: "amd64", OS: "linux", OSVersion: "3.6"}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", Variant: "pios"}, v1.Platform{Architecture: "amd64", OS: "linux"}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", Variant: "pios"}, v1.Platform{Architecture: "amd64", OS: "linux", Variant: "ubuntu"}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", Variant: "pios"}, v1.Platform{Architecture: "amd64", OS: "linux", Variant: "pios"}, true},
{v1.Platform{Architecture: "amd64", OS: "linux", OSFeatures: []string{"a", "b"}}, v1.Platform{Architecture: "amd64", OS: "linux"}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", OSFeatures: []string{"a", "b"}}, v1.Platform{Architecture: "amd64", OS: "linux", OSFeatures: []string{"a", "b"}}, true},
{v1.Platform{Architecture: "amd64", OS: "linux", OSFeatures: []string{"a", "b"}}, v1.Platform{Architecture: "amd64", OS: "linux", OSFeatures: []string{"ac", "bd"}}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", OSFeatures: []string{"a", "b"}}, v1.Platform{Architecture: "amd64", OS: "linux", OSFeatures: []string{"b", "a"}}, true},

{v1.Platform{Architecture: "amd64", OS: "linux", Features: []string{"a", "b"}}, v1.Platform{Architecture: "amd64", OS: "linux"}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", Features: []string{"a", "b"}}, v1.Platform{Architecture: "amd64", OS: "linux", Features: []string{"a", "b"}}, true},
{v1.Platform{Architecture: "amd64", OS: "linux", Features: []string{"a", "b"}}, v1.Platform{Architecture: "amd64", OS: "linux", Features: []string{"ac", "bd"}}, false},
{v1.Platform{Architecture: "amd64", OS: "linux", Features: []string{"a", "b"}}, v1.Platform{Architecture: "amd64", OS: "linux", Features: []string{"b", "a"}}, true},
}
for i, tt := range tests {
if equal := tt.a.Equals(tt.b); equal != tt.equal {
t.Errorf("%d: mismatched was %v expected %v; original %#v compared %#v", i, equal, tt.equal, tt.a, tt.b)
}
}
}

0 comments on commit 8cd45e1

Please sign in to comment.