carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package plans
2
3import (
4 "context"
5 "errors"
6 "testing"
7 "time"
8
9 "github.com/carlosframework/platform/internal/release"
10)
11
12func TestMarkerKey(t *testing.T) {
13 if got := MarkerKey(); got != "control/plans.json" {
14 t.Fatalf("MarkerKey = %q", got)
15 }
16}
17
18func TestMarkerRoundTrip(t *testing.T) {
19 ctx := context.Background()
20 s := release.NewDirStore(t.TempDir())
21 if m, etag, err := GetMarker(ctx, s); m != nil || etag != "" || err != nil {
22 t.Fatalf("absent: %+v, %q, %v", m, etag, err)
23 }
24 want := &Marker{Enabled: true, CatalogID: "v1@0123456789ab", UpdatedAt: time.Unix(1_800_000_000, 0).UTC()}
25 if _, err := PutMarker(ctx, s, want, ""); err != nil {
26 t.Fatal(err)
27 }
28 got, etag, err := GetMarker(ctx, s)
29 if err != nil || etag == "" {
30 t.Fatalf("get: %q, %v", etag, err)
31 }
32 want.Schema = MarkerSchema
33 if *got != *want {
34 t.Fatalf("got %+v, want %+v", got, want)
35 }
36}
37
38func TestMarkerRefusesUnknownSchema(t *testing.T) {
39 ctx := context.Background()
40 s := release.NewDirStore(t.TempDir())
41 if _, err := s.Put(ctx, MarkerKey(), []byte(`{"schema": 2, "enabled": true}`), ""); err != nil {
42 t.Fatal(err)
43 }
44 if m, _, err := GetMarker(ctx, s); err == nil {
45 t.Fatalf("accepted schema 2: %+v", m)
46 }
47}
48
49func TestPutMarkerIsCAS(t *testing.T) {
50 ctx := context.Background()
51 s := release.NewDirStore(t.TempDir())
52 if _, err := PutMarker(ctx, s, &Marker{Enabled: true}, ""); err != nil {
53 t.Fatal(err)
54 }
55 if _, err := PutMarker(ctx, s, &Marker{Enabled: false}, ""); !errors.Is(err, release.ErrCASConflict) {
56 t.Fatalf("second create-only put: %v", err)
57 }
58}
59