components-contrib/internal/wasm/wasm_test.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)
}
})
}
}