check / check (push) Failing after 2m22s
atime left mf.proto earlier and nothing reads or writes it, but docs/FORMAT.md still narrated its removal and listed it among the determinism rules. The spec now describes the file entry by its fields only. A new test compares the MFFilePath message descriptor, by name and number, with a list copied from the spec's field table. It does not read the spec, so changing a field means changing the proto, the spec and that list together. Model: opus-5-5
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package mfer_test
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/protobuf/reflect/protoreflect"
|
|
"sneak.berlin/go/mfer/mfer"
|
|
)
|
|
|
|
// mf.pb.go is generated from mf.proto and committed. `make generate`
|
|
// records the hash of the mf.proto it generated from in mf.proto.sha256.
|
|
func TestGeneratedCodeMatchesProto(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
proto, err := os.ReadFile("mf.proto")
|
|
require.NoError(t, err)
|
|
|
|
recorded, err := os.ReadFile("mf.proto.sha256")
|
|
require.NoError(t, err)
|
|
|
|
recordedHash, _, _ := strings.Cut(string(recorded), " ")
|
|
sum := sha256.Sum256(proto)
|
|
require.Equal(t, recordedHash, hex.EncodeToString(sum[:]),
|
|
"mfer/mf.proto has changed since mfer/mf.pb.go was generated "+
|
|
"from it: run `make generate` and commit the result")
|
|
}
|
|
|
|
// A file entry has exactly the fields docs/FORMAT.md lists for MFFilePath.
|
|
func TestFileEntryFieldsMatchSpec(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
want := map[string]protoreflect.FieldNumber{
|
|
"path": 1,
|
|
"size": 2,
|
|
"hashes": 3,
|
|
"mimeType": 301,
|
|
"mtime": 302,
|
|
"ctime": 303,
|
|
}
|
|
|
|
got := map[string]protoreflect.FieldNumber{}
|
|
|
|
fields := (&mfer.MFFilePath{}).ProtoReflect().Descriptor().Fields()
|
|
for i := range fields.Len() {
|
|
got[string(fields.Get(i).Name())] = fields.Get(i).Number()
|
|
}
|
|
|
|
require.Equal(t, want, got)
|
|
}
|