DLV-C3r3 (Node): mesh-build-node places a group's tagged version of the SDK from the registry
ADR 0607 §3, §5: the fetch's package argument also takes {name, version}; the version is placed from the registry in
each TypeScript member whatever its lock names, checked against the lock's integrity when the lock names it, else the
registry's; nothing is packed then, and a version the registry lacks fails naming it. The packed {repository, commit}
form stays for a checker that hands it. Rows in the placement and argument tests.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
@@ -98,18 +98,45 @@ func TestAMemberGetsTheSDKVersionItsLockNamesOrWaitsForIt(t *testing.T) {
|
||||
held := tgzOf(t, sdkPackage, "0.1.15")
|
||||
fakeRegistry(t, m, map[string][]byte{"0.1.15": held})
|
||||
dir := memberLocking(t, "0.1.15", integrityOf(held))
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", nil); err != nil || placedVersion(dir) != "0.1.15" {
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", nil, nil); err != nil || placedVersion(dir) != "0.1.15" {
|
||||
t.Errorf("the registry's 0.1.15: %v, placed %q", err, placedVersion(dir))
|
||||
}
|
||||
dir = memberLocking(t, "0.1.16", "sha512-x")
|
||||
err := m.placeSDK(context.Background(), dir, "modules/m", nil)
|
||||
err := m.placeSDK(context.Background(), dir, "modules/m", nil, nil)
|
||||
if err == nil || err.Error() != delivery.WaitsFor+"@novox/mesh-sdk@0.1.16" {
|
||||
t.Errorf("a version the registry lacks answered %v, want %s@novox/mesh-sdk@0.1.16", err, delivery.WaitsFor)
|
||||
}
|
||||
dir = memberLocking(t, "0.1.15", "sha512-another")
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", nil); err == nil || !strings.Contains(err.Error(), "sha512-another") {
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", nil, nil); err == nil || !strings.Contains(err.Error(), "sha512-another") {
|
||||
t.Errorf("a registry file of another integrity than the lock's answered %v", err)
|
||||
}
|
||||
// ADR 0607 §3, §5 (design 51 *Tagged versions*): given the group's tagged version, the fetch places it from the
|
||||
// registry whatever the lock names, against the lock's integrity when the lock names it, else the registry's; one the
|
||||
// registry lacks fails naming it, no wait (the check waited for its published).
|
||||
tagged := tgzOf(t, sdkPackage, "0.1.16-feat-x.1")
|
||||
fakeRegistry(t, m, map[string][]byte{"0.1.15": held, "0.1.16-feat-x.1": tagged})
|
||||
group := &groupPackage{Name: sdkPackage, Version: "0.1.16-feat-x.1"}
|
||||
for _, c := range []struct {
|
||||
name, locks, integrity, fails string
|
||||
}{
|
||||
{name: "a lock naming another version", locks: "0.1.15", integrity: integrityOf(held)},
|
||||
{name: "a lock naming the tagged version", locks: "0.1.16-feat-x.1", integrity: integrityOf(tagged)},
|
||||
{name: "a lock naming it with another integrity", locks: "0.1.16-feat-x.1", integrity: "sha512-other", fails: "sha512-other"},
|
||||
} {
|
||||
dir = memberLocking(t, c.locks, c.integrity)
|
||||
err := m.placeSDK(context.Background(), dir, "modules/m", nil, group)
|
||||
switch {
|
||||
case c.fails == "" && (err != nil || placedVersion(dir) != "0.1.16-feat-x.1"):
|
||||
t.Errorf("%s: %v, placed %q, want the group's tagged version", c.name, err, placedVersion(dir))
|
||||
case c.fails != "" && (err == nil || !strings.Contains(err.Error(), c.fails)):
|
||||
t.Errorf("%s: %v, want it to fail naming %s", c.name, err, c.fails)
|
||||
}
|
||||
}
|
||||
dir = memberLocking(t, "0.1.15", integrityOf(held))
|
||||
missing := &groupPackage{Name: sdkPackage, Version: "0.1.16-feat-x.9"}
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", nil, missing); err == nil || !strings.Contains(err.Error(), "0.1.16-feat-x.9") || strings.HasPrefix(err.Error(), delivery.WaitsFor) {
|
||||
t.Errorf("a tagged version the registry lacks answered %v, want it named and no wait", err)
|
||||
}
|
||||
}
|
||||
|
||||
// ADR 0500 §5 (S3, S4): the group's packed package is served in place of the registry's when the member's lock names its
|
||||
@@ -121,24 +148,24 @@ func TestTheGroupsPackageIsServedToAMemberLockingItsVersion(t *testing.T) {
|
||||
tgz := tgzOf(t, sdkPackage, "0.1.15")
|
||||
group := &packed{Name: sdkPackage, Version: "0.1.15", Integrity: integrityOf(tgz), Digest: digestOf(tgz), tgz: tgz}
|
||||
dir := memberLocking(t, "0.1.15", group.Integrity)
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group); err != nil || placedVersion(dir) != "0.1.15" || asked.Load() != 0 {
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group, nil); err != nil || placedVersion(dir) != "0.1.15" || asked.Load() != 0 {
|
||||
t.Errorf("the group's own version: %v, placed %q, the registry asked %d times", err, placedVersion(dir), asked.Load())
|
||||
}
|
||||
dir = memberLocking(t, "0.1.15", "sha512-other")
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group); err == nil || !strings.Contains(err.Error(), "sha512-other") || !strings.Contains(err.Error(), group.Integrity) {
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group, nil); err == nil || !strings.Contains(err.Error(), "sha512-other") || !strings.Contains(err.Error(), group.Integrity) {
|
||||
t.Errorf("another integrity answered %v, want both named", err)
|
||||
}
|
||||
dir = memberLocking(t, "0.1.14", integrityOf(tgzOf(t, sdkPackage, "0.1.14")))
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group); err != nil || placedVersion(dir) != "0.1.14" {
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group, nil); err != nil || placedVersion(dir) != "0.1.14" {
|
||||
t.Errorf("a member locking the registry's 0.1.14 in a group: %v, placed %q", err, placedVersion(dir))
|
||||
}
|
||||
dir = memberLocking(t, "0.1.13", "sha512-x")
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group); err == nil || !strings.Contains(err.Error(), "0.1.13") || !strings.Contains(err.Error(), "0.1.15") || strings.HasPrefix(err.Error(), delivery.WaitsFor) {
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group, nil); err == nil || !strings.Contains(err.Error(), "0.1.13") || !strings.Contains(err.Error(), "0.1.15") || strings.HasPrefix(err.Error(), delivery.WaitsFor) {
|
||||
t.Errorf("a version neither holds answered %v, want both named and no wait", err)
|
||||
}
|
||||
before := asked.Load()
|
||||
dir = memberLocking(t, "", "")
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group); err != nil || placedVersion(dir) != "" || asked.Load() != before {
|
||||
if err := m.placeSDK(context.Background(), dir, "modules/m", group, nil); err != nil || placedVersion(dir) != "" || asked.Load() != before {
|
||||
t.Errorf("a lock naming no SDK: %v, placed %q, the registry asked", err, placedVersion(dir))
|
||||
}
|
||||
}
|
||||
@@ -148,7 +175,8 @@ func TestTheGroupsPackageIsServedToAMemberLockingItsVersion(t *testing.T) {
|
||||
func TestTheGroupPackageArgumentIsRefusedWhenItIsNotOne(t *testing.T) {
|
||||
for _, bad := range []any{"novox/mesh-sdk", map[string]any{"repository": "novox/mesh-sdk", "commit": "main"},
|
||||
map[string]any{"repository": "../x", "commit": strings.Repeat("a", 40)},
|
||||
map[string]any{"repository": "novox/mesh-sdk", "commit": strings.Repeat("a", 40), "ref": "refs/heads/main"}} {
|
||||
map[string]any{"repository": "novox/mesh-sdk", "commit": strings.Repeat("a", 40), "ref": "refs/heads/main"},
|
||||
map[string]any{"name": "left-pad", "version": "1.0.0"}, map[string]any{"name": sdkPackage, "version": "latest"}} {
|
||||
if _, err := groupPackageArg(bad); err == nil {
|
||||
t.Errorf("%v was taken", bad)
|
||||
}
|
||||
@@ -157,4 +185,7 @@ func TestTheGroupPackageArgumentIsRefusedWhenItIsNotOne(t *testing.T) {
|
||||
if err != nil || g.Ref != "refs/pull/9/head" {
|
||||
t.Errorf("a pull request's head: %+v %v", g, err)
|
||||
}
|
||||
if g, err := groupPackageArg(map[string]any{"name": sdkPackage, "version": "0.1.16-feat-x.1"}); err != nil || !g.tagged() {
|
||||
t.Errorf("the group's tagged version: %+v %v", g, err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user