Invoke Stable ABI compatibility function in windows platform matcher
Signed-off-by: Kirtana Ashok <kiashok@microsoft.com>
This commit is contained in:
parent
36b871955c
commit
cfb30a31a8
@ -22,6 +22,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/Microsoft/hcsshim/osversion"
|
||||||
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"golang.org/x/sys/windows"
|
"golang.org/x/sys/windows"
|
||||||
)
|
)
|
||||||
@ -50,15 +51,36 @@ func (m windowsmatcher) Match(p specs.Platform) bool {
|
|||||||
match := m.defaultMatcher.Match(p)
|
match := m.defaultMatcher.Match(p)
|
||||||
|
|
||||||
if match && m.OS == "windows" {
|
if match && m.OS == "windows" {
|
||||||
if strings.HasPrefix(p.OSVersion, m.osVersionPrefix) {
|
// HPC containers do not have OS version filled
|
||||||
|
if p.OSVersion == "" {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return p.OSVersion == ""
|
|
||||||
|
hostOsVersion := GetOsVersion(m.osVersionPrefix)
|
||||||
|
ctrOsVersion := GetOsVersion(p.OSVersion)
|
||||||
|
return osversion.CheckHostAndContainerCompat(hostOsVersion, ctrOsVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
return match
|
return match
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetOsVersion(osVersionPrefix string) osversion.OSVersion {
|
||||||
|
parts := strings.Split(osVersionPrefix, ".")
|
||||||
|
if len(parts) < 3 {
|
||||||
|
return osversion.OSVersion{}
|
||||||
|
}
|
||||||
|
|
||||||
|
majorVersion, _ := strconv.Atoi(parts[0])
|
||||||
|
minorVersion, _ := strconv.Atoi(parts[1])
|
||||||
|
buildNumber, _ := strconv.Atoi(parts[2])
|
||||||
|
|
||||||
|
return osversion.OSVersion{
|
||||||
|
MajorVersion: uint8(majorVersion),
|
||||||
|
MinorVersion: uint8(minorVersion),
|
||||||
|
Build: uint16(buildNumber),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Less sorts matched platforms in front of other platforms.
|
// Less sorts matched platforms in front of other platforms.
|
||||||
// For matched platforms, it puts platforms with larger revision
|
// For matched platforms, it puts platforms with larger revision
|
||||||
// number in front.
|
// number in front.
|
||||||
|
@ -142,6 +142,110 @@ func TestMatchComparerMatch_WCOW(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestMatchComparerMatch_ABICheckWCOW checks windows platform matcher
|
||||||
|
// behavior for stable ABI and non-stable ABI compliant versions
|
||||||
|
func TestMatchComparerMatch_ABICheckWCOW(t *testing.T) {
|
||||||
|
platformWS2019 := imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.17763",
|
||||||
|
}
|
||||||
|
platformWS2022 := imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.20348",
|
||||||
|
}
|
||||||
|
platformWindows11 := imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.22621",
|
||||||
|
}
|
||||||
|
matcherWS2019 := windowsmatcher{
|
||||||
|
Platform: platformWS2019,
|
||||||
|
osVersionPrefix: platformWS2019.OSVersion,
|
||||||
|
defaultMatcher: &matcher{
|
||||||
|
Platform: Normalize(platformWS2019),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
matcherWS2022 := windowsmatcher{
|
||||||
|
Platform: platformWS2022,
|
||||||
|
osVersionPrefix: platformWS2022.OSVersion,
|
||||||
|
defaultMatcher: &matcher{
|
||||||
|
Platform: Normalize(platformWS2022),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
matcherWindows11 := windowsmatcher{
|
||||||
|
Platform: platformWindows11,
|
||||||
|
osVersionPrefix: platformWindows11.OSVersion,
|
||||||
|
defaultMatcher: &matcher{
|
||||||
|
Platform: Normalize(platformWindows11),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range []struct {
|
||||||
|
hostPlatformMatcher windowsmatcher
|
||||||
|
testPlatform imagespec.Platform
|
||||||
|
match bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
hostPlatformMatcher: matcherWS2019,
|
||||||
|
testPlatform: imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.17763",
|
||||||
|
},
|
||||||
|
match: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
hostPlatformMatcher: matcherWS2019,
|
||||||
|
testPlatform: imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.20348",
|
||||||
|
},
|
||||||
|
match: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
hostPlatformMatcher: matcherWS2022,
|
||||||
|
testPlatform: imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.17763",
|
||||||
|
},
|
||||||
|
match: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
hostPlatformMatcher: matcherWS2022,
|
||||||
|
testPlatform: imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.20348",
|
||||||
|
},
|
||||||
|
match: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
hostPlatformMatcher: matcherWindows11,
|
||||||
|
testPlatform: imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.17763",
|
||||||
|
},
|
||||||
|
match: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
hostPlatformMatcher: matcherWindows11,
|
||||||
|
testPlatform: imagespec.Platform{
|
||||||
|
Architecture: "amd64",
|
||||||
|
OS: "windows",
|
||||||
|
OSVersion: "10.0.20348",
|
||||||
|
},
|
||||||
|
match: true,
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
assert.Equal(t, test.match, test.hostPlatformMatcher.Match(test.testPlatform), "should match: %t, %s to %s", test.match, test.hostPlatformMatcher.Platform, test.testPlatform)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestMatchComparerMatch_LCOW(t *testing.T) {
|
func TestMatchComparerMatch_LCOW(t *testing.T) {
|
||||||
major, minor, build := windows.RtlGetNtVersionNumbers()
|
major, minor, build := windows.RtlGetNtVersionNumbers()
|
||||||
buildStr := fmt.Sprintf("%d.%d.%d", major, minor, build)
|
buildStr := fmt.Sprintf("%d.%d.%d", major, minor, build)
|
||||||
|
Loading…
Reference in New Issue
Block a user