Windows: Updates Windows Vendoring
Updates windows dependent libraries for vendoing.
This commit is contained in:
110
vendor/github.com/Microsoft/hcsshim/internal/cni/registry.go
generated
vendored
Normal file
110
vendor/github.com/Microsoft/hcsshim/internal/cni/registry.go
generated
vendored
Normal file
@ -0,0 +1,110 @@
|
||||
package cni
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/Microsoft/hcsshim/internal/guid"
|
||||
"github.com/Microsoft/hcsshim/internal/regstate"
|
||||
)
|
||||
|
||||
const (
|
||||
cniRoot = "cni"
|
||||
cniKey = "cfg"
|
||||
)
|
||||
|
||||
// PersistedNamespaceConfig is the registry version of the `NamespaceID` to UVM
|
||||
// map.
|
||||
type PersistedNamespaceConfig struct {
|
||||
namespaceID string
|
||||
stored bool
|
||||
|
||||
ContainerID string
|
||||
HostUniqueID guid.GUID
|
||||
}
|
||||
|
||||
// NewPersistedNamespaceConfig creates an in-memory namespace config that can be
|
||||
// persisted to the registry.
|
||||
func NewPersistedNamespaceConfig(namespaceID, containerID string, containerHostUniqueID guid.GUID) *PersistedNamespaceConfig {
|
||||
return &PersistedNamespaceConfig{
|
||||
namespaceID: namespaceID,
|
||||
ContainerID: containerID,
|
||||
HostUniqueID: containerHostUniqueID,
|
||||
}
|
||||
}
|
||||
|
||||
// LoadPersistedNamespaceConfig loads a persisted config from the registry that matches
|
||||
// `namespaceID`. If not found returns `regstate.NotFoundError`
|
||||
func LoadPersistedNamespaceConfig(namespaceID string) (*PersistedNamespaceConfig, error) {
|
||||
sk, err := regstate.Open(cniRoot, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer sk.Close()
|
||||
|
||||
pnc := PersistedNamespaceConfig{
|
||||
namespaceID: namespaceID,
|
||||
stored: true,
|
||||
}
|
||||
if err := sk.Get(namespaceID, cniKey, &pnc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pnc, nil
|
||||
}
|
||||
|
||||
// Store stores or updates the in-memory config to its registry state. If the
|
||||
// store failes returns the store error.
|
||||
func (pnc *PersistedNamespaceConfig) Store() error {
|
||||
if pnc.namespaceID == "" {
|
||||
return errors.New("invalid namespaceID ''")
|
||||
}
|
||||
if pnc.ContainerID == "" {
|
||||
return errors.New("invalid containerID ''")
|
||||
}
|
||||
empty := guid.GUID{}
|
||||
if pnc.HostUniqueID == empty {
|
||||
return errors.New("invalid containerHostUniqueID 'empy'")
|
||||
}
|
||||
sk, err := regstate.Open(cniRoot, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer sk.Close()
|
||||
|
||||
if pnc.stored {
|
||||
if err := sk.Set(pnc.namespaceID, cniKey, pnc); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if err := sk.Create(pnc.namespaceID, cniKey, pnc); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
pnc.stored = true
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove removes any persisted state associated with this config. If the config
|
||||
// is not found in the registery `Remove` returns no error.
|
||||
func (pnc *PersistedNamespaceConfig) Remove() error {
|
||||
if pnc.stored {
|
||||
sk, err := regstate.Open(cniRoot, false)
|
||||
if err != nil {
|
||||
if regstate.IsNotFoundError(err) {
|
||||
pnc.stored = false
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
defer sk.Close()
|
||||
|
||||
if err := sk.Remove(pnc.namespaceID); err != nil {
|
||||
if regstate.IsNotFoundError(err) {
|
||||
pnc.stored = false
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
}
|
||||
pnc.stored = false
|
||||
return nil
|
||||
}
|
137
vendor/github.com/Microsoft/hcsshim/internal/cni/registry_test.go
generated
vendored
Normal file
137
vendor/github.com/Microsoft/hcsshim/internal/cni/registry_test.go
generated
vendored
Normal file
@ -0,0 +1,137 @@
|
||||
package cni
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/Microsoft/hcsshim/internal/guid"
|
||||
"github.com/Microsoft/hcsshim/internal/regstate"
|
||||
)
|
||||
|
||||
func Test_LoadPersistedNamespaceConfig_NoConfig(t *testing.T) {
|
||||
pnc, err := LoadPersistedNamespaceConfig(t.Name())
|
||||
if pnc != nil {
|
||||
t.Fatal("config should be nil")
|
||||
}
|
||||
if err == nil {
|
||||
t.Fatal("err should be set")
|
||||
} else {
|
||||
if !regstate.IsNotFoundError(err) {
|
||||
t.Fatal("err should be NotFoundError")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Test_LoadPersistedNamespaceConfig_WithConfig(t *testing.T) {
|
||||
pnc := NewPersistedNamespaceConfig(t.Name(), "test-container", guid.New())
|
||||
err := pnc.Store()
|
||||
if err != nil {
|
||||
pnc.Remove()
|
||||
t.Fatalf("store failed with: %v", err)
|
||||
}
|
||||
defer pnc.Remove()
|
||||
|
||||
pnc2, err := LoadPersistedNamespaceConfig(t.Name())
|
||||
if err != nil {
|
||||
t.Fatal("should have no error on stored config")
|
||||
}
|
||||
if pnc2 == nil {
|
||||
t.Fatal("stored config should have been returned")
|
||||
} else {
|
||||
if pnc.namespaceID != pnc2.namespaceID {
|
||||
t.Fatal("actual/stored namespaceID not equal")
|
||||
}
|
||||
if pnc.ContainerID != pnc2.ContainerID {
|
||||
t.Fatal("actual/stored ContainerID not equal")
|
||||
}
|
||||
if pnc.HostUniqueID != pnc2.HostUniqueID {
|
||||
t.Fatal("actual/stored HostUniqueID not equal")
|
||||
}
|
||||
if !pnc2.stored {
|
||||
t.Fatal("stored should be true for registry load")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Test_PersistedNamespaceConfig_StoreNew(t *testing.T) {
|
||||
pnc := NewPersistedNamespaceConfig(t.Name(), "test-container", guid.New())
|
||||
err := pnc.Store()
|
||||
if err != nil {
|
||||
pnc.Remove()
|
||||
t.Fatalf("store failed with: %v", err)
|
||||
}
|
||||
defer pnc.Remove()
|
||||
}
|
||||
|
||||
func Test_PersistedNamespaceConfig_StoreUpdate(t *testing.T) {
|
||||
pnc := NewPersistedNamespaceConfig(t.Name(), "test-container", guid.New())
|
||||
err := pnc.Store()
|
||||
if err != nil {
|
||||
pnc.Remove()
|
||||
t.Fatalf("store failed with: %v", err)
|
||||
}
|
||||
defer pnc.Remove()
|
||||
|
||||
pnc.ContainerID = "test-container2"
|
||||
pnc.HostUniqueID = guid.New()
|
||||
err = pnc.Store()
|
||||
if err != nil {
|
||||
pnc.Remove()
|
||||
t.Fatalf("store update failed with: %v", err)
|
||||
}
|
||||
|
||||
// Verify the update
|
||||
pnc2, err := LoadPersistedNamespaceConfig(t.Name())
|
||||
if err != nil {
|
||||
t.Fatal("stored config should have been returned")
|
||||
}
|
||||
if pnc.ContainerID != pnc2.ContainerID {
|
||||
t.Fatal("actual/stored ContainerID not equal")
|
||||
}
|
||||
if pnc.HostUniqueID != pnc2.HostUniqueID {
|
||||
t.Fatal("actual/stored HostUniqueID not equal")
|
||||
}
|
||||
}
|
||||
|
||||
func Test_PersistedNamespaceConfig_RemoveNotStored(t *testing.T) {
|
||||
pnc := NewPersistedNamespaceConfig(t.Name(), "test-container", guid.New())
|
||||
err := pnc.Remove()
|
||||
if err != nil {
|
||||
t.Fatalf("remove on not stored should not fail: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_PersistedNamespaceConfig_RemoveStoredKey(t *testing.T) {
|
||||
pnc := NewPersistedNamespaceConfig(t.Name(), "test-container", guid.New())
|
||||
err := pnc.Store()
|
||||
if err != nil {
|
||||
t.Fatalf("store failed with: %v", err)
|
||||
}
|
||||
err = pnc.Remove()
|
||||
if err != nil {
|
||||
t.Fatalf("remove on stored key should not fail: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_PersistedNamespaceConfig_RemovedOtherKey(t *testing.T) {
|
||||
pnc := NewPersistedNamespaceConfig(t.Name(), "test-container", guid.New())
|
||||
err := pnc.Store()
|
||||
if err != nil {
|
||||
t.Fatalf("store failed with: %v", err)
|
||||
}
|
||||
|
||||
pnc2, err := LoadPersistedNamespaceConfig(t.Name())
|
||||
if err != nil {
|
||||
t.Fatal("should of found stored config")
|
||||
}
|
||||
|
||||
err = pnc.Remove()
|
||||
if err != nil {
|
||||
t.Fatalf("remove on stored key should not fail: %v", err)
|
||||
}
|
||||
|
||||
// Now remove the other key that has the invalid memory state
|
||||
err = pnc2.Remove()
|
||||
if err != nil {
|
||||
t.Fatalf("remove on in-memory already removed should not fail: %v", err)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user