Asks gitea_commit_trees with paths (the interface agreed with the lead); a forge that cannot say is a retry. Pins mesh-sdk feat/r4e-sdk 9cb4d59.
99 lines
3.8 KiB
Go
99 lines
3.8 KiB
Go
package bridge
|
|
|
|
import (
|
|
"os"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/delivery"
|
|
)
|
|
|
|
// ADR 0499 clause 3 (I6): the merged and the pull message carry each named path's git object of a module whose every
|
|
// artifact names its paths, read at the same commit as its manifest. The manifest is mesh-sdk's module.json at 9cb4d59 (its
|
|
// lib names src, test, package.json, package-lock.json and tsconfig.json).
|
|
|
|
type namedCall struct {
|
|
owner, repo, sha string
|
|
paths map[string][]string
|
|
}
|
|
|
|
func namedOf(calls *[]namedCall, answer map[string]map[string]string, err error) Named {
|
|
return func(owner, repo, sha string, paths map[string][]string) (map[string]map[string]string, error) {
|
|
*calls = append(*calls, namedCall{owner, repo, sha, paths})
|
|
return answer, err
|
|
}
|
|
}
|
|
|
|
func sdkFiles(t *testing.T) Files {
|
|
t.Helper()
|
|
raw, err := os.ReadFile("testdata/mesh-sdk-9cb4d59.module.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return func(owner, repo, path, ref string) ([]byte, error) {
|
|
if path == "module.json" {
|
|
return raw, nil
|
|
}
|
|
return nil, ErrNotFound
|
|
}
|
|
}
|
|
|
|
var sdkObjects = map[string]map[string]string{"": {"src": "1111111111111111111111111111111111111111", "test": "2222222222222222222222222222222222222222",
|
|
"package.json": "3333333333333333333333333333333333333333", "package-lock.json": "4444444444444444444444444444444444444444", "tsconfig.json": "5555555555555555555555555555555555555555"}}
|
|
|
|
func TestAMergedMessageCarriesTheNamedPathsObjectsOfAModuleNamingItsPaths(t *testing.T) { // I6, ADR 0499 clause 3
|
|
var calls []call
|
|
var named []namedCall
|
|
body := mergedBody(map[string]any{"repo": "mesh-sdk", "module_dirs": []string{""}})
|
|
msg, err := ConvertNamed(mergedSubject, body, treesOf(&calls, "r0", map[string]string{"": "r0"}, nil), sdkFiles(t), namedOf(&named, sdkObjects, nil))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f, err := delivery.DecodeForge(msg.Data)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !reflect.DeepEqual(f.Paths, sdkObjects) {
|
|
t.Errorf("paths = %v, want the forge's objects of lib's named paths", f.Paths)
|
|
}
|
|
if len(named) != 1 || named[0].sha != merge || named[0].repo != "mesh-sdk" ||
|
|
strings.Join(named[0].paths[""], ",") != "package-lock.json,package.json,src,test,tsconfig.json" {
|
|
t.Errorf("asked %+v, want the root's named paths at the merge commit", named)
|
|
}
|
|
}
|
|
|
|
func TestAMessageOfModulesNamingNoPathsAsksNoObjects(t *testing.T) { // I6
|
|
var calls []call
|
|
var named []namedCall
|
|
if _, err := ConvertNamed(mergedSubject, mergedBody(nil), treesOf(&calls, "r0", map[string]string{"modules/a": "t1"}, nil), anyFiles, namedOf(&named, nil, nil)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(named) != 0 {
|
|
t.Errorf("asked %+v, want nothing for modules naming no paths", named)
|
|
}
|
|
}
|
|
|
|
func TestAPullMessageCarriesTheNamedPathsObjectsAtItsHead(t *testing.T) { // I6, ADR 0499 clause 3
|
|
var named []namedCall
|
|
body := mergedBody(map[string]any{"repo": "mesh-sdk", "module_dirs": []string{""}, "base": "feat/y"})
|
|
msg, err := ConvertNamed(UpdatedSubject, body, nil, sdkFiles(t), namedOf(&named, sdkObjects, nil))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f, _ := delivery.DecodeForge(msg.Data)
|
|
if !reflect.DeepEqual(f.Paths, sdkObjects) || len(named) != 1 || named[0].sha != head {
|
|
t.Errorf("paths = %v, asked %+v; want the objects read at the head", f.Paths, named)
|
|
}
|
|
}
|
|
|
|
func TestAForgeThatCannotSayTheObjectsIsARetry(t *testing.T) { // I6: a message without them would give the module none
|
|
var calls []call
|
|
var named []namedCall
|
|
body := mergedBody(map[string]any{"repo": "mesh-sdk", "module_dirs": []string{""}})
|
|
_, err := ConvertNamed(mergedSubject, body, treesOf(&calls, "r0", map[string]string{"": "r0"}, nil), sdkFiles(t), namedOf(&named, nil, os.ErrDeadlineExceeded))
|
|
if err == nil || !strings.Contains(err.Error(), "named paths") {
|
|
t.Errorf("err = %v, want a retry naming the named paths", err)
|
|
}
|
|
}
|