Files
akvorado/common/remotedatasource/config_test.go
Vincent Bernat e2f1df9add tests: replace godebug by go-cmp for structure diffs
go-cmp is stricter and allow to catch more problems. Moreover, the
output is a bit nicer.
2025-08-23 16:03:09 +02:00

103 lines
2.4 KiB
Go

// SPDX-FileCopyrightText: 2024 Free Mobile
// SPDX-License-Identifier: AGPL-3.0-only
package remotedatasource
import (
"testing"
"time"
"github.com/gin-gonic/gin"
"akvorado/common/helpers"
)
func TestSourceDecode(t *testing.T) {
helpers.TestConfigurationDecode(t, helpers.ConfigurationDecodeCases{
{
Description: "Empty",
Initial: func() any { return Source{} },
Configuration: func() any {
return gin.H{
"url": "https://example.net",
"interval": "10m",
}
},
Expected: Source{
URL: "https://example.net",
Method: "GET",
Timeout: time.Minute,
Interval: 10 * time.Minute,
},
}, {
Description: "Simple transform",
Initial: func() any { return Source{} },
Configuration: func() any {
return gin.H{
"url": "https://example.net",
"interval": "10m",
"transform": ".[]",
}
},
Expected: Source{
URL: "https://example.net",
Method: "GET",
Timeout: time.Minute,
Interval: 10 * time.Minute,
Transform: MustParseTransformQuery(".[]"),
},
}, {
Description: "Use POST",
Initial: func() any { return Source{} },
Configuration: func() any {
return gin.H{
"url": "https://example.net",
"method": "POST",
"timeout": "2m",
"interval": "10m",
"transform": ".[]",
}
},
Expected: Source{
URL: "https://example.net",
Method: "POST",
Timeout: 2 * time.Minute,
Interval: 10 * time.Minute,
Transform: MustParseTransformQuery(".[]"),
},
}, {
Description: "Complex transform",
Initial: func() any { return Source{} },
Configuration: func() any {
return gin.H{
"url": "https://example.net",
"interval": "10m",
"transform": `
.prefixes[] | {prefix: .ip_prefix, tenant: "amazon", region: .region, role: .service|ascii_downcase}
`,
}
},
Expected: Source{
URL: "https://example.net",
Method: "GET",
Timeout: time.Minute,
Interval: 10 * time.Minute,
Transform: MustParseTransformQuery(`
.prefixes[] | {prefix: .ip_prefix, tenant: "amazon", region: .region, role: .service|ascii_downcase}
`),
},
}, {
Description: "Incorrect transform",
Initial: func() any { return Source{} },
Configuration: func() any {
return gin.H{
"url": "https://example.net",
"interval": "10m",
"transform": "878778&&",
}
},
Error: true,
},
})
}