mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-06-22 05:10:29 +00:00
182 lines
3.7 KiB
Go
182 lines
3.7 KiB
Go
|
package schema_test
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
|
||
|
. "github.com/kairos-io/kairos-sdk/schema"
|
||
|
. "github.com/onsi/ginkgo/v2"
|
||
|
. "github.com/onsi/gomega"
|
||
|
)
|
||
|
|
||
|
var _ = Describe("P2P Schema", func() {
|
||
|
var config *KConfig
|
||
|
var err error
|
||
|
var yaml string
|
||
|
|
||
|
JustBeforeEach(func() {
|
||
|
config, err = NewConfigFromYAML(yaml, P2PSchema{})
|
||
|
Expect(err).ToNot(HaveOccurred())
|
||
|
})
|
||
|
|
||
|
Context("with role master", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
role: master
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="`
|
||
|
})
|
||
|
|
||
|
It("succeeds", func() {
|
||
|
Expect(config.IsValid()).To(BeTrue())
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with role worker", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
role: worker
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="`
|
||
|
})
|
||
|
|
||
|
It("succeeds", func() {
|
||
|
Expect(config.IsValid()).To(BeTrue())
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with role none", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
role: none
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="`
|
||
|
})
|
||
|
|
||
|
It("succeeds", func() {
|
||
|
Expect(config.IsValid()).To(BeTrue())
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("with other role", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
role: foobar
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="`
|
||
|
})
|
||
|
|
||
|
It("errors", func() {
|
||
|
Expect(config.IsValid()).NotTo(BeTrue())
|
||
|
Expect(config.ValidationError.Error()).To(MatchRegexp(`value must be one of "master", "worker", "none"`))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("With a network_token and p2p.auto.enable = false", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="
|
||
|
auto:
|
||
|
enable: false`
|
||
|
})
|
||
|
|
||
|
It("errors", func() {
|
||
|
Expect(config.IsValid()).NotTo(BeTrue())
|
||
|
Expect(
|
||
|
strings.Contains(config.ValidationError.Error(), `value must be true`),
|
||
|
).To(BeTrue())
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("With an empty network_token and p2p.auto.enable = true", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
network_token: ""
|
||
|
auto:
|
||
|
enable: true`
|
||
|
})
|
||
|
|
||
|
It("Fails", func() {
|
||
|
Expect(config.IsValid()).NotTo(BeTrue())
|
||
|
Expect(
|
||
|
strings.Contains(config.ValidationError.Error(),
|
||
|
"length must be >= 1, but got 0",
|
||
|
),
|
||
|
).To(BeTrue())
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("With a network_token and p2p.auto.enable = true", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="
|
||
|
auto:
|
||
|
enable: true`
|
||
|
})
|
||
|
|
||
|
It("succeeds", func() {
|
||
|
Expect(config.IsValid()).To(BeTrue())
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("With a p2p.auto.enable = false and ha.enable = true", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
network_token: ""
|
||
|
auto:
|
||
|
enable: false
|
||
|
ha:
|
||
|
enable: true`
|
||
|
})
|
||
|
|
||
|
It("errors", func() {
|
||
|
Expect(config.IsValid()).NotTo(BeTrue())
|
||
|
Expect(config.ValidationError.Error()).To(MatchRegexp("(length must be >= 1, but got 0|value must be true)"))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("HA with 0 master nodes", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="
|
||
|
auto:
|
||
|
enable: true
|
||
|
ha:
|
||
|
enable: true
|
||
|
master_nodes: 0`
|
||
|
})
|
||
|
|
||
|
It("fails", func() {
|
||
|
Expect(config.IsValid()).NotTo(BeTrue())
|
||
|
Expect(config.ValidationError.Error()).To(MatchRegexp("must be >= 1 but found 0"))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("HA", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="
|
||
|
auto:
|
||
|
enable: true
|
||
|
ha:
|
||
|
enable: true
|
||
|
master_nodes: 2`
|
||
|
})
|
||
|
|
||
|
It("succeedes", func() {
|
||
|
Expect(config.IsValid()).To(BeTrue())
|
||
|
})
|
||
|
})
|
||
|
|
||
|
Context("kubevip", func() {
|
||
|
BeforeEach(func() {
|
||
|
yaml = `#cloud-config
|
||
|
network_token: "b3RwOgogIGRoYWdlX3NpemU6IDIwOTcxNTIwCg=="
|
||
|
auto:
|
||
|
enable: true
|
||
|
ha:
|
||
|
enable: true
|
||
|
master_nodes: 2`
|
||
|
})
|
||
|
|
||
|
It("succeedes", func() {
|
||
|
Expect(config.IsValid()).To(BeTrue())
|
||
|
})
|
||
|
})
|
||
|
})
|