Andrey Smirnov bddd4f1bf6 refactor: move external API packages into machinery/
This moves `pkg/config`, `pkg/client` and `pkg/constants`
under `pkg/machinery` umbrella.

And `pkg/machinery` is published as Go module inside Talos repository.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2020-08-17 09:56:14 -07:00

129 lines
3.7 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package containerd_test
import (
"testing"
"github.com/stretchr/testify/suite"
"github.com/talos-systems/crypto/x509"
"github.com/talos-systems/talos/internal/pkg/containers/cri/containerd"
"github.com/talos-systems/talos/pkg/machinery/config"
"github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1"
"github.com/talos-systems/talos/pkg/machinery/constants"
)
type mockConfig struct {
mirrors map[string]*v1alpha1.RegistryMirrorConfig
config map[string]*v1alpha1.RegistryConfig
}
// Mirrors implements the Registries interface.
func (c *mockConfig) Mirrors() map[string]config.RegistryMirrorConfig {
mirrors := make(map[string]config.RegistryMirrorConfig, len(c.mirrors))
for k, v := range c.mirrors {
mirrors[k] = v
}
return mirrors
}
// Config implements the Registries interface.
func (c *mockConfig) Config() map[string]config.RegistryConfig {
registries := make(map[string]config.RegistryConfig, len(c.config))
for k, v := range c.config {
registries[k] = v
}
return registries
}
type ConfigSuite struct {
suite.Suite
}
func (suite *ConfigSuite) TestGenerateRegistriesConfig() {
cfg := &mockConfig{
mirrors: map[string]*v1alpha1.RegistryMirrorConfig{
"docker.io": {
MirrorEndpoints: []string{"https://registry-1.docker.io", "https://registry-2.docker.io"},
},
},
config: map[string]*v1alpha1.RegistryConfig{
"some.host:123": {
RegistryAuth: &v1alpha1.RegistryAuthConfig{
RegistryUsername: "root",
RegistryPassword: "secret",
RegistryAuth: "auth",
RegistryIdentityToken: "token",
},
RegistryTLS: &v1alpha1.RegistryTLSConfig{
TLSInsecureSkipVerify: true,
TLSCA: []byte("cacert"),
TLSClientIdentity: &x509.PEMEncodedCertificateAndKey{
Crt: []byte("clientcert"),
Key: []byte("clientkey"),
},
},
},
},
}
files, err := containerd.GenerateRegistriesConfig(cfg)
suite.Require().NoError(err)
suite.Assert().Equal([]config.File{
&v1alpha1.MachineFile{
FileContent: `cacert`,
FilePermissions: 0o600,
FilePath: "/etc/cri/ca/some.host:123.crt",
FileOp: "create",
},
&v1alpha1.MachineFile{
FileContent: `clientcert`,
FilePermissions: 0o600,
FilePath: "/etc/cri/client/some.host:123.crt",
FileOp: "create",
},
&v1alpha1.MachineFile{
FileContent: `clientkey`,
FilePermissions: 0o600,
FilePath: "/etc/cri/client/some.host:123.key",
FileOp: "create",
},
&v1alpha1.MachineFile{
FileContent: `[plugins]
[plugins.cri]
[plugins.cri.registry]
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io", "https://registry-2.docker.io"]
[plugins.cri.registry.configs]
[plugins.cri.registry.configs."some.host:123"]
[plugins.cri.registry.configs."some.host:123".auth]
username = "root"
password = "secret"
auth = "auth"
identitytoken = "token"
[plugins.cri.registry.configs."some.host:123".tls]
insecure_skip_verify = true
ca_file = "/etc/cri/ca/some.host:123.crt"
cert_file = "/etc/cri/client/some.host:123.crt"
key_file = "/etc/cri/client/some.host:123.key"
`,
FilePermissions: 0o644,
FilePath: constants.CRIContainerdConfig,
FileOp: "append",
},
}, files)
}
func TestConfigSuite(t *testing.T) {
suite.Run(t, new(ConfigSuite))
}