This is an automated email from the ASF dual-hosted git repository.

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new d409efd1f test(rmqctl): give the packaging gate a completion fixture 
(#6330)
d409efd1f is described below

commit d409efd1fb923176240c6f9be60b0ce8320674a0
Author: lizhimins <[email protected]>
AuthorDate: Mon Oct 12 15:26:01 2026 +0800

    test(rmqctl): give the packaging gate a completion fixture (#6330)
    
    Follow-up to #5883, which made package-release.sh fail closed when the 
completion scripts are absent: the packaging test still called it without 
COMPLETION_DIR, so a clean checkout turned the gate (and the rmqctl-test CI 
job, which runs before make build) red for a reason unrelated to the change 
under test.
    
    - Supply a fixture holding the four scripts `make completion` produces and 
pass it as COMPLETION_DIR.
    - Assert all four reach the archive, so dropping the copy step fails the 
test.
    - Add the missing-directory case and require the guard's own diagnostic: 
with the guard removed the cp below it still fails, so the exit status alone 
does not pin it.
    
    Both mutations verified red with `go test -count=1 ./scripts/...` (a plain 
run is cached and does not notice a changed shell script); the unmutated tree 
is green on linux and windows.
---
 rmqctl/scripts/license-binary_test.go | 36 +++++++++++++++++++++++++++++------
 1 file changed, 30 insertions(+), 6 deletions(-)

diff --git a/rmqctl/scripts/license-binary_test.go 
b/rmqctl/scripts/license-binary_test.go
index f56a6e0e5..6193f78c6 100644
--- a/rmqctl/scripts/license-binary_test.go
+++ b/rmqctl/scripts/license-binary_test.go
@@ -48,17 +48,35 @@ func TestBinaryLicensePackagingTest(t *testing.T) {
                        if output, err := generate.CombinedOutput(); err != nil 
{
                                t.Fatalf("license generation failed: %v\n%s", 
err, output)
                        }
-                       pack := func(osName, material string, success bool) {
+                       // package-release.sh fails closed when the completion 
scripts are absent, so the
+                       // fixture has to supply them; `make completion` is 
what produces the real four.
+                       completion := filepath.Join(dir, "completion")
+                       completionScripts := []string{"rmqctl.bash", "_rmqctl", 
"rmqctl.fish", "rmqctl.ps1"}
+                       if err := os.MkdirAll(completion, 0755); err != nil {
+                               t.Fatal(err)
+                       }
+                       for _, name := range completionScripts {
+                               if err := 
os.WriteFile(filepath.Join(completion, name), []byte("# "+name+" fixture\n"), 
0644); err != nil {
+                                       t.Fatal(err)
+                               }
+                       }
+                       pack := func(osName, material, completionDir, 
wantOutput string, success bool) {
                                t.Helper()
                                cmd := exec.Command("bash", filepath.Join(root, 
"rmqctl/scripts/package-release.sh"),
                                        binary, osName, "amd64", "fixture", 
material, filepath.Join(dir, "packages"))
-                               cmd.Env = append(os.Environ(), "GO="+goCommand)
+                               cmd.Env = append(os.Environ(), "GO="+goCommand, 
"COMPLETION_DIR="+completionDir)
                                output, err := cmd.CombinedOutput()
                                if (err == nil) != success {
                                        t.Fatalf("packaging gate returned the 
wrong result success=%v err=%v\n%s", success, err, output)
                                }
+                               // A missing completion directory has to fail 
with the guard's own diagnostic: dropping
+                               // the guard still exits non-zero (the cp below 
it fails), so the status alone does not
+                               // pin it and the operator would be left with a 
cryptic cp error instead.
+                               if wantOutput != "" && 
!strings.Contains(string(output), wantOutput) {
+                                       t.Fatalf("packaging gate did not report 
%q:\n%s", wantOutput, output)
+                               }
                        }
-                       pack(target, legal, true)
+                       pack(target, legal, completion, "", true)
                        contents := map[string]string{}
                        archive := filepath.Join(dir, "packages", 
"rmqctl-"+target+"-amd64-fixture")
                        if target == "windows" {
@@ -118,12 +136,18 @@ func TestBinaryLicensePackagingTest(t *testing.T) {
                        if target == "windows" && 
!strings.Contains(contents["LICENSE"], "mousetrap") {
                                t.Fatal("the Windows package is missing a 
platform-specific dependency license")
                        }
-                       pack("darwin", legal, false)
-                       pack(target, "", false)
+                       for _, name := range completionScripts {
+                               if 
!strings.Contains(contents["completion/"+name], name+" fixture") {
+                                       t.Fatalf("the package is missing 
completion/%s", name)
+                               }
+                       }
+                       pack("darwin", legal, completion, "", false)
+                       pack(target, "", completion, "", false)
+                       pack(target, legal, filepath.Join(dir, 
"completion-not-generated"), "Missing completion scripts", false)
                        if err := os.WriteFile(filepath.Join(legal, "NOTICE"), 
[]byte("tampered"), 0644); err != nil {
                                t.Fatal(err)
                        }
-                       pack(target, legal, false)
+                       pack(target, legal, completion, "", false)
                })
        }
 }

Reply via email to