mirror of
https://github.com/kairos-io/kairos-agent.git
synced 2025-09-24 19:57:24 +00:00
186 lines
7.2 KiB
Go
186 lines
7.2 KiB
Go
package action_test
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/kairos-io/kairos-agent/v2/pkg/action"
|
|
agentConfig "github.com/kairos-io/kairos-agent/v2/pkg/config"
|
|
v1mock "github.com/kairos-io/kairos-agent/v2/tests/mocks"
|
|
sdkTypes "github.com/kairos-io/kairos-sdk/types"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
"github.com/twpayne/go-vfs/v5"
|
|
"github.com/twpayne/go-vfs/v5/vfst"
|
|
)
|
|
|
|
var _ = Describe("Sysext Actions test", Focus, func() {
|
|
var config *agentConfig.Config
|
|
var runner *v1mock.FakeRunner
|
|
var fs vfs.FS
|
|
var logger sdkTypes.KairosLogger
|
|
var mounter *v1mock.ErrorMounter
|
|
var syscall *v1mock.FakeSyscall
|
|
var client *v1mock.FakeHTTPClient
|
|
var cloudInit *v1mock.FakeCloudInitRunner
|
|
var cleanup func()
|
|
var memLog *bytes.Buffer
|
|
var extractor *v1mock.FakeImageExtractor
|
|
var err error
|
|
|
|
BeforeEach(func() {
|
|
runner = v1mock.NewFakeRunner()
|
|
syscall = &v1mock.FakeSyscall{}
|
|
mounter = v1mock.NewErrorMounter()
|
|
client = &v1mock.FakeHTTPClient{}
|
|
memLog = &bytes.Buffer{}
|
|
logger = sdkTypes.NewBufferLogger(memLog)
|
|
logger.SetLevel("debug")
|
|
extractor = v1mock.NewFakeImageExtractor(logger)
|
|
cloudInit = &v1mock.FakeCloudInitRunner{}
|
|
fs, cleanup, err = vfst.NewTestFS(map[string]interface{}{})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
// Config object with all of our fakes on it
|
|
config = agentConfig.NewConfig(
|
|
agentConfig.WithFs(fs),
|
|
agentConfig.WithRunner(runner),
|
|
agentConfig.WithLogger(logger),
|
|
agentConfig.WithMounter(mounter),
|
|
agentConfig.WithSyscall(syscall),
|
|
agentConfig.WithClient(client),
|
|
agentConfig.WithCloudInitRunner(cloudInit),
|
|
agentConfig.WithImageExtractor(extractor),
|
|
agentConfig.WithPlatform("linux/amd64"),
|
|
)
|
|
})
|
|
|
|
AfterEach(func() {
|
|
GinkgoWriter.Println(memLog.String())
|
|
cleanup()
|
|
})
|
|
|
|
Describe("Listing extensions", func() {
|
|
It("should NOT fail if the bootstate is not valid", func() {
|
|
extensions, err := action.ListSystemExtensions(config, "invalid")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(BeEmpty())
|
|
})
|
|
Describe("With no dir", func() {
|
|
It("should return no extensions for installed extensions", func() {
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(BeEmpty())
|
|
})
|
|
It("should return no extensions for active enabled extensions", func() {
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "active")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(BeEmpty())
|
|
})
|
|
It("should return no extensions for passive enabled extensions", func() {
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "passive")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(BeEmpty())
|
|
})
|
|
})
|
|
Describe("With empty dir", func() {
|
|
It("should return no extensions", func() {
|
|
err := vfs.MkdirAll(config.Fs, "/var/lib/kairos/extensions", 0755)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(BeEmpty())
|
|
})
|
|
It("should return no extensions for active enabled extensions", func() {
|
|
err := vfs.MkdirAll(config.Fs, "/var/lib/kairos/extensions", 0755)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "active")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(BeEmpty())
|
|
})
|
|
It("should return no extensions for passive enabled extensions", func() {
|
|
err := vfs.MkdirAll(config.Fs, "/var/lib/kairos/extensions", 0755)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "passive")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(BeEmpty())
|
|
})
|
|
})
|
|
Describe("With dir with files", func() {
|
|
BeforeEach(func() {
|
|
err := vfs.MkdirAll(config.Fs, "/var/lib/kairos/extensions", 0755)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
})
|
|
AfterEach(func() { cleanup() })
|
|
It("should not return files that are not valid extensions", func() {
|
|
err = config.Fs.WriteFile("/var/lib/kairos/extensions/invalid", []byte("invalid"), 0644)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(BeEmpty())
|
|
})
|
|
It("should return files that are valid extensions", func() {
|
|
err = config.Fs.WriteFile("/var/lib/kairos/extensions/valid.raw", []byte("valid"), 0644)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(extensions).To(Equal([]action.SysExtension{
|
|
{
|
|
Name: "valid.raw",
|
|
Location: "/var/lib/kairos/extensions/valid.raw",
|
|
},
|
|
}))
|
|
})
|
|
It("should ONLY return files that are valid extensions", func() {
|
|
err = config.Fs.WriteFile("/var/lib/kairos/extensions/invalid", []byte("invalid"), 0644)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
err = config.Fs.WriteFile("/var/lib/kairos/extensions/valid.raw", []byte("valid"), 0644)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
extensions, err := action.ListSystemExtensions(config, "")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(len(extensions)).To(Equal(1))
|
|
Expect(extensions).To(Equal([]action.SysExtension{
|
|
{
|
|
Name: "valid.raw",
|
|
Location: "/var/lib/kairos/extensions/valid.raw",
|
|
},
|
|
}))
|
|
})
|
|
})
|
|
})
|
|
Describe("Enabling extensions", func() {
|
|
It("should fail if bootState is not valid", func() { Skip("not implemented") })
|
|
It("should enable an installed extension", func() { Skip("not implemented") })
|
|
It("should fail to enable a missing extension", func() { Skip("not implemented") })
|
|
It("should not fail if the extension is already enabled", func() { Skip("not implemented") })
|
|
|
|
})
|
|
Describe("Disabling extensions", func() {
|
|
It("should fail if bootState is not valid", func() { Skip("not implemented") })
|
|
It("should disable an enabled extension", func() { Skip("not implemented") })
|
|
It("should fail to disable a missing extension", func() { Skip("not implemented") })
|
|
It("should not fail if the extension is already disabled", func() { Skip("not implemented") })
|
|
})
|
|
Describe("Installing extensions", func() {
|
|
Describe("With a file source", func() {
|
|
It("should install a extension", func() { Skip("not implemented") })
|
|
It("should fail to install a missing extension", func() { Skip("not implemented") })
|
|
})
|
|
Describe("with a docker source", func() {
|
|
It("should install a extension", func() { Skip("not implemented") })
|
|
It("should fail to install a missing extension", func() { Skip("not implemented") })
|
|
})
|
|
Describe("with a http source", func() {
|
|
It("should install a extension", func() { Skip("not implemented") })
|
|
It("should fail to install a missing extension", func() { Skip("not implemented") })
|
|
})
|
|
})
|
|
Describe("Removing extensions", func() {
|
|
It("should remove an installed extension", func() { Skip("not implemented") })
|
|
It("should disable and remove an enabled extension", func() { Skip("not implemented") })
|
|
It("should fail to remove a missing extension", func() { Skip("not implemented") })
|
|
It("should not fail if the extension is already removed", func() { Skip("not implemented") })
|
|
})
|
|
})
|