Something went wrong on our end
Select Git revision
issue-7_test.go
-
Volker Schukai authoredVolker Schukai authored
issue-7_test.go 5.39 KiB
// Copyright 2022 schukai GmbH
// SPDX-License-Identifier: AGPL-3.0
package configuration
import (
"github.com/stretchr/testify/assert"
"os"
"path"
"path/filepath"
"testing"
)
type Issue7Routing struct {
P PathValue `json:"p" yaml:"p"`
X string `json:"x" yaml:"x"`
}
type Issue7Server struct {
Routing []Issue7Routing `json:"routing" yaml:"routing"`
}
type Issue7Config struct {
Server Issue7Server `json:"server" yaml:"server"`
}
func createIssue7TempFile(content string) (string, error) {
file, err := os.CreateTemp("", "tempfile")
if err != nil {
return "", err
}
defer func() {
_ = file.Close()
}()
_, err = file.WriteString(content)
if err != nil {
return "", err
}
return file.Name(), nil
}
func TestPathRewrite(t *testing.T) {
c := New(Issue7Config{})
n, err := createIssue7TempFile(`{
"server": {
"routing": [
{
"p": "./test",
"x": "testX"
}
]
}
}`)
if err != nil {
t.Fatal(err)
}
c.SetMnemonic("my-app")
c.AddFile(n)
c.Import()
_ = os.Remove(n)
//fmt.Println(c.Config().Host)
expected := path.Join(filepath.Dir(n), "test")
assert.Equal(t, expected, c.Config().Server.Routing[0].P.String())
assert.Equal(t, "testX", c.Config().Server.Routing[0].X)
}
// Test data structs
type Issue7TestStruct1 struct {
A PathValue
B string
C int
}
type Issue7TestStruct2 struct {
A PathValue
B Issue7TestStruct1
C []PathValue
D map[string]PathValue
E string
}
func TestIssue7ReplacePath(t *testing.T) {
basePath := "/basepath"
// Test case 1
ts1 := Issue7TestStruct1{
A: "relative/path",
B: "justastring",
C: 42,
}
err := replacePath[*Issue7TestStruct1](basePath, &ts1)
assert.Nil(t, err)
if ts1.A != PathValue(path.Join(basePath, "relative/path")) {
t.Errorf("Expected '%s', got '%s'", path.Join(basePath, "relative/path"), ts1.A)
}
// Test case 2
ts2 := Issue7TestStruct2{
A: "another/relative/path",
B: ts1,
C: []PathValue{"rel1", "rel2"},
D: map[string]PathValue{
"key1": "relkey1",
"key2": "relkey2",
},
E: "justastring",
}
err = replacePath[*Issue7TestStruct2](basePath, &ts2)
assert.Nil(t, err)
if ts2.A != PathValue(path.Join(basePath, "another/relative/path")) {
t.Errorf("Expected '%s', got '%s'", path.Join(basePath, "another/relative/path"), ts2.A)
}
if ts2.B.A != PathValue(path.Join(basePath, "relative/path")) {
t.Errorf("Expected '%s', got '%s'", path.Join(basePath, "relative/path"), ts2.B.A)
}
if ts2.C[0] != PathValue(path.Join(basePath, "rel1")) {
t.Errorf("Expected '%s', got '%s'", path.Join(basePath, "rel1"), ts2.C[0])
}
if ts2.C[1] != PathValue(path.Join(basePath, "rel2")) {
t.Errorf("Expected '%s', got '%s'", path.Join(basePath, "rel2"), ts2.C[1])
}
if ts2.D["key1"] != PathValue(path.Join(basePath, "relkey1")) {
t.Errorf("Expected '%s', got '%s'", path.Join(basePath, "relkey1"), ts2.D["key1"])
}
if ts2.D["key2"] != PathValue(path.Join(basePath, "relkey2")) {
t.Errorf("Expected '%s', got '%s'", path.Join(basePath, "relkey2"), ts2.D["key2"])
}
if ts2.E != "justastring" {
t.Errorf("Expected '%s', got '%s'", "justastring", ts2.E)
}
}
type DeepNestedStruct struct {
A PathValue
B string
C *PathValue
D []PathValue
E map[string]PathValue
F interface{}
G *DeepNestedStruct
H []DeepNestedStruct
I map[string]DeepNestedStruct
}
type MyStruct struct {
A PathValue
B string
C *PathValue
D []PathValue
E map[string]PathValue
F interface{}
G DeepNestedStruct
H []DeepNestedStruct
I map[string]DeepNestedStruct
}
func TestReplacePath(t *testing.T) {
// Sample seed data to guide the fuzzer
tempPathValueC := PathValue("rel/pathC")
tempPathValueF := PathValue("rel/pathF")
tempPathValueGC := PathValue("rel/pathGC")
s := &MyStruct{
A: "rel/pathA",
B: "normalStringB",
C: &tempPathValueC,
D: []PathValue{"rel1D", "rel2D"},
E: map[string]PathValue{
"key1E": "relkey1E",
"key2E": "relkey2E",
},
F: tempPathValueF,
G: DeepNestedStruct{
A: "rel/pathGA",
B: "normalStringGB",
C: &tempPathValueGC,
D: []PathValue{"rel1GD", "rel2GD"},
E: map[string]PathValue{
"key1GE": "relkey1GE",
"key2GE": "relkey2GE",
},
F: tempPathValueF,
H: []DeepNestedStruct{
{
A: "rel/pathGHA",
},
},
I: map[string]DeepNestedStruct{
"key1GI": {
A: "rel/pathGIA",
},
},
},
H: []DeepNestedStruct{
{
A: "rel/pathHA",
},
},
I: map[string]DeepNestedStruct{
"key1I": {
A: "rel/pathIA",
},
},
}
basePath := "/basepath"
// Copy the struct to compare later
original := *s
err := replacePath[*MyStruct](basePath, s)
assert.Nil(t, err)
// Checking each field to ensure replacePath works as expected
if s.A != original.A && !path.IsAbs(s.A.String()) {
t.Errorf("Path not replaced correctly for field A")
}
if s.C != nil && *s.C != *original.C && !path.IsAbs(s.C.String()) {
t.Errorf("Path not replaced correctly for field C")
}
for idx, val := range s.D {
if val != original.D[idx] && !path.IsAbs(val.String()) {
t.Errorf("Path not replaced correctly for field D at index %d", idx)
}
}
for key, val := range s.E {
if val != original.E[key] && !path.IsAbs(val.String()) {
t.Errorf("Path not replaced correctly for field E with key %s", key)
}
}
if s.F != original.F && !path.IsAbs(s.F.(PathValue).String()) {
t.Errorf("Path not replaced correctly for field F")
}
// Check fields of the nested struct (G) similarly...
// Continue this for all fields and nested fields of MyStruct
}