120 lines
2.7 KiB
Go
120 lines
2.7 KiB
Go
package wasm
|
|
|
|
import (
|
|
"context"
|
|
_ "embed"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/dapr/components-contrib/metadata"
|
|
)
|
|
|
|
const (
|
|
urlArgsFile = "file://testdata/args/main.wasm"
|
|
urlPythonOCI = "oci://ghcr.io/vmware-labs/python-wasm:3.11.3"
|
|
)
|
|
|
|
//go:embed testdata/args/main.wasm
|
|
var urlArgsBin []byte
|
|
|
|
func TestGetInitMetadata(t *testing.T) {
|
|
type testCase struct {
|
|
name string
|
|
metadata metadata.Base
|
|
expected *InitMetadata
|
|
expectedErr string
|
|
}
|
|
|
|
tests := []testCase{
|
|
{
|
|
name: "file valid",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": urlArgsFile,
|
|
}},
|
|
expected: &InitMetadata{
|
|
URL: urlArgsFile,
|
|
Guest: urlArgsBin,
|
|
GuestName: "main",
|
|
},
|
|
},
|
|
{
|
|
name: "empty url",
|
|
metadata: metadata.Base{Properties: map[string]string{}},
|
|
expectedErr: "missing url",
|
|
},
|
|
{
|
|
name: "http invalid",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": "http:// ",
|
|
}},
|
|
expectedErr: "parse \"http:// \": invalid character \" \" in host name",
|
|
},
|
|
{
|
|
name: "https invalid",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": "https:// ",
|
|
}},
|
|
expectedErr: "parse \"https:// \": invalid character \" \" in host name",
|
|
},
|
|
{
|
|
name: "TODO oci",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": urlPythonOCI,
|
|
}},
|
|
expectedErr: "TODO oci",
|
|
},
|
|
{
|
|
name: "TODO http",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": "http://foo/bar.wasm",
|
|
}},
|
|
expectedErr: "TODO http",
|
|
},
|
|
{
|
|
name: "TODO https",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": "https://foo/bar.wasm",
|
|
}},
|
|
expectedErr: "TODO https",
|
|
},
|
|
{
|
|
name: "unsupported scheme",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": "ldap://foo/bar.wasm",
|
|
}},
|
|
expectedErr: "unsupported URL scheme: ldap",
|
|
},
|
|
{
|
|
name: "file not found",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": "file://testduta",
|
|
}},
|
|
expectedErr: "open testduta: ",
|
|
},
|
|
{
|
|
name: "file dir not file",
|
|
metadata: metadata.Base{Properties: map[string]string{
|
|
"url": "file://testdata",
|
|
}},
|
|
// Below ends in "is a directory" in unix, and "The handle is invalid." in windows.
|
|
expectedErr: "read testdata: ",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
tc := tt
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
ctx := context.Background()
|
|
md, err := GetInitMetadata(ctx, tc.metadata)
|
|
if tc.expectedErr == "" {
|
|
require.NoError(t, err)
|
|
require.Equal(t, tc.expected, md)
|
|
} else {
|
|
// Use substring match as the error can be different in Windows.
|
|
require.Contains(t, err.Error(), tc.expectedErr)
|
|
}
|
|
})
|
|
}
|
|
}
|