mirror of
https://github.com/siderolabs/omni.git
synced 2025-08-09 19:16:59 +02:00
Run rekres, update Go version and update all files affected by linters. Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
106 lines
2.8 KiB
Go
106 lines
2.8 KiB
Go
// Copyright (c) 2025 Sidero Labs, Inc.
|
|
//
|
|
// Use of this software is governed by the Business Source License
|
|
// included in the LICENSE file.
|
|
|
|
package factory_test
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/cosi-project/runtime/pkg/state"
|
|
"github.com/cosi-project/runtime/pkg/state/impl/inmem"
|
|
"github.com/cosi-project/runtime/pkg/state/impl/namespaced"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/siderolabs/omni/client/api/omni/specs"
|
|
"github.com/siderolabs/omni/client/pkg/omni/resources"
|
|
"github.com/siderolabs/omni/client/pkg/omni/resources/omni"
|
|
"github.com/siderolabs/omni/internal/backend/factory"
|
|
)
|
|
|
|
func TestParseRequest(t *testing.T) {
|
|
state := state.WrapCore(namespaced.NewState(inmem.Build))
|
|
|
|
specs := map[string]*specs.InstallationMediaSpec{
|
|
"iso-metal-arm64": {
|
|
Name: "ISO",
|
|
Architecture: "arm64",
|
|
Profile: "metal",
|
|
ContentType: "application/x-iso",
|
|
DestFilePrefix: "omni-metal-arm64",
|
|
Extension: "iso",
|
|
},
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(t.Context(), time.Second*5)
|
|
defer cancel()
|
|
|
|
for id, spec := range specs {
|
|
res := omni.NewInstallationMedia(resources.EphemeralNamespace, id)
|
|
res.TypedSpec().Value = spec
|
|
|
|
require.NoError(t, state.Create(ctx, res))
|
|
}
|
|
|
|
for _, tt := range []struct {
|
|
expectedParams *factory.ProxyParams
|
|
name string
|
|
incomingURL string
|
|
shouldFail bool
|
|
}{
|
|
{
|
|
name: "with secureboot",
|
|
incomingURL: "/image/schematic/1.6.0/iso-metal-arm64?secureboot=true",
|
|
expectedParams: &factory.ProxyParams{
|
|
ProxyURL: "https://factory.talos.dev/image/schematic/1.6.0/metal-arm64-secureboot.iso",
|
|
ContentType: "application/x-iso",
|
|
DestinationFilename: "omni-metal-arm64-1.6.0-secureboot.iso",
|
|
},
|
|
},
|
|
{
|
|
name: "without secureboot",
|
|
incomingURL: "/image/schematic/1.6.0/iso-metal-arm64",
|
|
expectedParams: &factory.ProxyParams{
|
|
ProxyURL: "https://factory.talos.dev/image/schematic/1.6.0/metal-arm64.iso",
|
|
ContentType: "application/x-iso",
|
|
DestinationFilename: "omni-metal-arm64-1.6.0.iso",
|
|
},
|
|
},
|
|
{
|
|
name: "not found: incomplete path",
|
|
incomingURL: "/image/schematic/",
|
|
shouldFail: true,
|
|
},
|
|
{
|
|
name: "not found: no /image prefix",
|
|
incomingURL: "/unknown",
|
|
shouldFail: true,
|
|
},
|
|
{
|
|
name: "not found: no such image",
|
|
incomingURL: "/image/schematic/1.6.0/the-image",
|
|
shouldFail: true,
|
|
},
|
|
} {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
request, err := http.NewRequestWithContext(ctx, http.MethodHead, "https://localhost"+tt.incomingURL, nil)
|
|
require.NoError(err)
|
|
|
|
params, err := factory.ParseRequest(request, state)
|
|
if tt.shouldFail {
|
|
require.Error(err)
|
|
|
|
return
|
|
}
|
|
|
|
require.EqualValues(tt.expectedParams, params)
|
|
})
|
|
}
|
|
}
|