carlos / platform Public

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

Plain git — no account needed to clone.

Download

Download this file

1package main
2
3import (
4 "bytes"
5 "context"
6 "errors"
7 "os"
8 "testing"
9
10 "github.com/carlosframework/platform/internal/release"
11)
12
13type fix4MigrationReadTrap struct{ release.Store }
14
15func (fix4MigrationReadTrap) Get(context.Context, string) ([]byte, string, error) {
16 return nil, "", errors.New("main did not read records during preflight")
17}
18
19func TestPlan9Fix4FlagOffMigrationMatchesMain(t *testing.T) {
20 t.Setenv("CARLOS_HOST_CLAIM", "")
21 for _, family := range []string{"instances", "sidecars"} {
22 for _, body := range []string{`{"record_seq":0}`, "{\"record_seq\":9, \"unknown\": true}\n", `{"record_seq":1,"record_seq":2}`, `{"Record_Seq":1}`, `{"record_seq":null}`, `{"record_seq":18446744073709551615}`} {
23 t.Run(family+"/"+body, func(t *testing.T) {
24 store := release.NewDirStore(t.TempDir())
25 source := "apps/bab/app/" + family + "/source.json"
26 dest := "apps/cac/app/" + family + "/source.json"
27 if _, err := store.Put(t.Context(), source, []byte(body), ""); err != nil {
28 t.Fatal(err)
29 }
30 if err := validateMigrationRecords(t.Context(), fix4MigrationReadTrap{store}, []copyOp{{from: source, to: dest}}); err != nil {
31 t.Fatalf("flag-off preflight differs from main: %v", err)
32 }
33 if _, err := putMigrationObject(t.Context(), store, dest, []byte(body)); err != nil {
34 t.Fatalf("main's create-only copy refused: %v", err)
35 }
36 raw, _, err := store.Get(t.Context(), dest)
37 if err != nil || !bytes.Equal(raw, []byte(body)) {
38 t.Fatalf("copy changed bytes: %q %v", raw, err)
39 }
40 if _, err := putMigrationObject(t.Context(), store, dest, []byte(`{"different":true}`)); !errors.Is(err, release.ErrCASConflict) {
41 t.Fatalf("copy overwrote existing destination: %v", err)
42 }
43 if _, _, err := store.Get(t.Context(), source); errors.Is(err, os.ErrNotExist) {
44 t.Fatal("copy removed source")
45 }
46 })
47 }
48 }
49}
50