| 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) |
| } |
| } |
| } |
| } |