Skip to content

Commit

Permalink
lxd/cloudinit: Adapt unit tests to work after refactoring
Browse files Browse the repository at this point in the history
Signed-off-by: hamistao <[email protected]>
  • Loading branch information
hamistao committed Feb 23, 2025
1 parent bbb5b74 commit 02b646a
Showing 1 changed file with 25 additions and 34 deletions.
59 changes: 25 additions & 34 deletions lxd/cloudinit/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import (
func TestMergeSSHKeyCloudConfig(t *testing.T) {
instanceConfig := map[string]string{"cloud-init.ssh-keys.mykey": "root:gh:user1"}

// First try with an empty cloud-config.
out, err := MergeSSHKeyCloudConfig(instanceConfig, "")
if err != nil {
t.Fatal(err)
}
// Parsing an invalid config should leave it unchanged.
instanceConfig["cloud-init.vendor-data"] = `users:
- name: root
ssh-import-id: gh:user2
`

vendorData, userData := GetResultingCloudConfig(instanceConfig, "cloud-init.vendor-data", "cloud-init.user-data", "instance", "project")

expectedOutput := `#cloud-config
users:
Expand All @@ -22,35 +24,24 @@ users:
- gh:user1 #lxd:cloud-init.ssh-keys
`

if expectedOutput != out {
t.Fatalf("Output %q is different from expected %q", out, expectedOutput)
// Parsing invalid cloud-config should leave it unchanged.
if vendorData != instanceConfig["cloud-init.vendor-data"] {
t.Fatalf("Output %q is different from expected %q", vendorData, instanceConfig["cloud-init.vendor-data"])
}

invalidCloudConfig := `#cloud-config
users:
- name: root
ssh-import-id: gh:user2
`

// Check merging into invalid config returns an error.
_, err = MergeSSHKeyCloudConfig(instanceConfig, invalidCloudConfig)
if err == nil {
t.Fatal("Parsing invalid config did not return an error")
if userData != expectedOutput {
t.Fatalf("Output %q is different from expected %q", userData, expectedOutput)
}

cloudConfig := `#cloud-config
instanceConfig["cloud-init.vendor-data"] = `#cloud-config
users:
- name: root
ssh-import-id: gh:user2
ssh-authorized-keys: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfOyl6A6lSE+e57RLf4GwDzlg6PALjtiweokxQeCPL0
shell: /bin/bash
`

// Merge the instance config into a cloud-config that already contain some keys
out, err = MergeSSHKeyCloudConfig(instanceConfig, cloudConfig)
if err != nil {
t.Fatal(err)
}
vendorData, userData = GetResultingCloudConfig(instanceConfig, "cloud-init.vendor-data", "cloud-init.user-data", "instance", "project")

expectedOutput = `#cloud-config
users:
Expand All @@ -64,22 +55,22 @@ users:
- gh:user1 #lxd:cloud-init.ssh-keys
`

if expectedOutput != out {
t.Fatalf("Output %q is different from expected %q", out, expectedOutput)
if vendorData != expectedOutput {
t.Fatalf("Output %q is different from expected %q", vendorData, expectedOutput)
}

// Should not merge to user-data since vendor-data has "users" defined.
if userData != "" {
t.Fatalf(`Output %q is different from expected ""`, userData)
}

// Add a pure public key to instance config.
instanceConfig["cloud-init.ssh-keys.otherkey"] = "user:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfOyl6A6lSE+e57RLf4GwDzlg6PALjtiweokxQeCPL0"

scalarUserCloudConfig := `#cloud-config
instanceConfig["cloud-init.user-data"] = `#cloud-config
users: foo
`

// Merge the extended instance config with a cloud-config with a simple users string.
out, err = MergeSSHKeyCloudConfig(instanceConfig, scalarUserCloudConfig)
if err != nil {
t.Fatal(err)
}
_, userData = GetResultingCloudConfig(instanceConfig, "", "cloud-init.user-data", "instance", "project")

expectedOutput = `#cloud-config
users:
Expand All @@ -102,7 +93,7 @@ users:

// The order of maps inside a list is not predicatable during YAML marshalling, so the order
// of users can change and generate two different but equivalent results.
if expectedOutput+rootUserConfig+customUserConfig != out && expectedOutput+customUserConfig+rootUserConfig != out {
t.Fatalf("Output %q is different from expected %q", out, expectedOutput)
if expectedOutput+rootUserConfig+customUserConfig != userData && expectedOutput+customUserConfig+rootUserConfig != userData {
t.Fatalf("Output %q conflicts with expected %q", userData, expectedOutput+rootUserConfig+customUserConfig)
}
}

0 comments on commit 02b646a

Please sign in to comment.