After introducing Go 1.18 to a project, it's required by law to convert at least one method to a generic one. Everyone hates IntToPtr, StringToPtr, BoolToPtr and Uint64ToPtr, so let's convert them to the ultimate generic ToPtr one. Signed-off-by: Ondřej Budai <ondrej@budai.cz>
135 lines
3.3 KiB
Go
135 lines
3.3 KiB
Go
package disk
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/osbuild/osbuild-composer/internal/common"
|
|
)
|
|
|
|
func TestNewPathTrieFromMap(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
type testCase struct {
|
|
entries map[string]interface{}
|
|
trie *PathTrie
|
|
}
|
|
|
|
tests := []testCase{
|
|
{
|
|
entries: map[string]interface{}{},
|
|
trie: &PathTrie{
|
|
Name: []string{},
|
|
},
|
|
},
|
|
{
|
|
entries: map[string]interface{}{
|
|
"/": common.ToPtr(1),
|
|
},
|
|
trie: &PathTrie{
|
|
Name: []string{},
|
|
Payload: common.ToPtr(1),
|
|
},
|
|
},
|
|
{
|
|
entries: map[string]interface{}{
|
|
"/": common.ToPtr(1),
|
|
"/var": common.ToPtr(2),
|
|
"/var/lib/chrony": common.ToPtr(3),
|
|
"/var/lib/chrony/logs": common.ToPtr(4),
|
|
"/var/lib/osbuild": common.ToPtr(5),
|
|
"/var/lib/osbuild/store/cache": common.ToPtr(6),
|
|
"/boot": common.ToPtr(7),
|
|
"/boot/efi": common.ToPtr(8),
|
|
},
|
|
trie: &PathTrie{
|
|
Name: []string{},
|
|
Payload: common.ToPtr(1),
|
|
Paths: []*PathTrie{
|
|
{
|
|
Name: []string{"boot"},
|
|
Payload: common.ToPtr(7),
|
|
Paths: []*PathTrie{
|
|
{
|
|
Name: []string{"efi"},
|
|
Payload: common.ToPtr(8),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: []string{"var"},
|
|
Payload: common.ToPtr(2),
|
|
Paths: []*PathTrie{
|
|
{
|
|
Name: []string{"lib", "chrony"},
|
|
Payload: common.ToPtr(3),
|
|
Paths: []*PathTrie{
|
|
{
|
|
Name: []string{"logs"},
|
|
Payload: common.ToPtr(4),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: []string{"lib", "osbuild"},
|
|
Payload: common.ToPtr(5),
|
|
Paths: []*PathTrie{
|
|
{
|
|
Name: []string{"store", "cache"},
|
|
Payload: common.ToPtr(6),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
have := NewPathTrieFromMap(tc.entries)
|
|
assert.NotNil(have)
|
|
assert.Equal(tc.trie, have)
|
|
}
|
|
}
|
|
|
|
func TestPathTrieLookup(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
entries := map[string]interface{}{
|
|
"/": "/",
|
|
"/boot": "/boot",
|
|
"/boot/efi": "/boot/efi",
|
|
"/var": "/var",
|
|
"/var/lib/osbuild": "/var/lib/osbuild",
|
|
"/var/lib/osbuild/store/cache": "/var/lib/osbuild/store/cache",
|
|
"/var/lib/chrony": "/var/lib/chrony",
|
|
"/var/lib/chrony/logs": "/var/lib/chrony/logs",
|
|
}
|
|
|
|
trie := NewPathTrieFromMap(entries)
|
|
|
|
testCases := map[string]string{
|
|
"/": "/",
|
|
"/srv": "/",
|
|
"/srv/data": "/",
|
|
"/boot": "/boot",
|
|
"/boot/efi": "/boot/efi",
|
|
"/boot/grub2": "/boot",
|
|
"/boot/efi/fedora": "/boot/efi",
|
|
"/var/lib/osbuild": "/var/lib/osbuild",
|
|
"/var/lib/osbuild/test": "/var/lib/osbuild",
|
|
"/var/lib/chrony": "/var/lib/chrony",
|
|
"/var/lib/chrony/test": "/var/lib/chrony",
|
|
"/var/lib/chrony/logs": "/var/lib/chrony/logs",
|
|
"/var/lib/chrony/logs/data": "/var/lib/chrony/logs",
|
|
}
|
|
|
|
for k, v := range testCases {
|
|
node, _ := trie.Lookup(k)
|
|
assert.NotNil(node)
|
|
assert.Equal(v, node.Payload, "Lookup path: '%s' (%+v)", k, node.Name)
|
|
}
|
|
}
|