blob: d1daf881d3c810cf0d35dc14f1448d340cfc4080 [file] [log] [blame]
package workspace
import (
"context"
"os"
"testing"
"github.com/google/go-cmp/cmp"
)
func TestCheckNixPath(t *testing.T) {
for _, te := range []struct {
in string
okay bool
}{
{"foo", true},
{"foo.bar.baz", true},
{"foo.bar.baz.", false},
{"foo.bar.baz..", false},
{".foo.bar.baz", false},
{"..foo.bar.baz", false},
{"foo..bar.baz", false},
{".", false},
{"", false},
{"ops.machines.\"test.example.com\".config", true},
{"ops.machines.\"test.example.com.config", false},
{"ops.machines.\"test.example.com\"bar.config", false},
{"ops.machines.bar\"test.example.com\".config", false},
{"\"test.example.com\"bar", false},
{"test.example.com\"", false},
{"foo--.__bar.b-a-z---", true},
{"foo.0bar", false},
{"foo.-bar", false},
{"test\\.test", false},
{"test test", false},
} {
err := checkNixPath(te.in)
if te.okay && err != nil {
t.Errorf("%q: expected okay, got %v", te.in, err)
}
if !te.okay && err == nil {
t.Errorf("%q: expected error", te.in)
}
}
}
// TestEvalHscloud nix exercises EvalHscloudNix against
// //go/workspace/exports.nix.
func TestEvalHscloudNix(t *testing.T) {
if _, err := os.Stat("/nix/store"); err != nil {
t.Skip("no /nix/store")
}
ctx, ctxC := context.WithCancel(context.Background())
defer ctxC()
{
var got []string
if err := EvalHscloudNix(ctx, &got, "go.workspace.exports.someArray"); err != nil {
t.Errorf("Accessing someArray failed: %v", err)
} else {
want := []string{"hello", "there"}
if diff := cmp.Diff(want, got); diff != "" {
t.Errorf("someArray diff:\n%s", diff)
}
}
}
{
type barS struct {
Baz int64 `json:"baz"`
}
type gotS struct {
Foo string `json:"foo"`
Bar barS `json:"bar"`
}
var got gotS
if err := EvalHscloudNix(ctx, &got, "go.workspace.exports.someAttrset"); err != nil {
t.Errorf("Accessing someAttrset failed: %v", err)
} else {
want := gotS{
Foo: "foo",
Bar: barS{
Baz: 42,
},
}
if diff := cmp.Diff(want, got); diff != "" {
t.Errorf("someAttrset diff:\n%s", diff)
}
}
}
}