Skip to content

Commit b2084cc

Browse files
Merge pull request #1100 from percona/PT-2097-add-test-for-psmdb-summary
PT-2097 - Add tests to check if exported psmdb summary is valid
2 parents f353954 + a1413c8 commit b2084cc

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

src/go/pt-k8s-debug-collector/main_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@
1414
package main
1515

1616
import (
17+
"archive/tar"
1718
"bytes"
19+
"compress/gzip"
1820
"context"
1921
"flag"
2022
"fmt"
23+
"io"
2124
"log"
2225
"os"
2326
"os/exec"
@@ -483,11 +486,78 @@ func (s *CollectorSuite) TestResourceOption() {
483486
if strings.TrimRight(bytes.NewBuffer(out).String(), "\n") != test.want {
484487
s.Failf("Summary Check", "test %s\nresource %s\nnamespace %s\noutput is not as expected\nOutput: %s\nWanted: %s", test.name, resource, test.namespace, out, test.want)
485488
}
489+
490+
if test.want != "0" {
491+
err = validateSummaryByNamespace("cluster-dump.tar.gz", test.namespace)
492+
s.NoErrorf(err, "summary validation failed for namespace %s, resource %s", test.namespace, resource)
493+
}
486494
}
487495
})
488496
}
489497
}
490498

499+
func validateSummaryByNamespace(archivePath, namespace string) error {
500+
switch namespace {
501+
case "psmdb":
502+
return validatePSMDBSummary(archivePath, namespace)
503+
default:
504+
return nil
505+
}
506+
}
507+
508+
func validatePSMDBSummary(archivePath, namespace string) error {
509+
file, err := os.Open(archivePath)
510+
if err != nil {
511+
return err
512+
}
513+
defer file.Close()
514+
515+
gzr, err := gzip.NewReader(file)
516+
if err != nil {
517+
return err
518+
}
519+
defer gzr.Close()
520+
521+
tarReader := tar.NewReader(gzr)
522+
validated := 0
523+
524+
for {
525+
header, err := tarReader.Next()
526+
if err == io.EOF {
527+
break
528+
}
529+
if err != nil {
530+
return err
531+
}
532+
533+
if header.Typeflag != tar.TypeReg {
534+
continue
535+
}
536+
if !strings.HasSuffix(header.Name, "/summary.txt") {
537+
continue
538+
}
539+
if !strings.Contains(header.Name, "/"+namespace+"/") {
540+
continue
541+
}
542+
543+
content, err := io.ReadAll(tarReader)
544+
if err != nil {
545+
return err
546+
}
547+
if !bytes.Contains(content, []byte("# Report On")) {
548+
return fmt.Errorf("summary file %s does not contain # Report On", header.Name)
549+
}
550+
551+
validated++
552+
}
553+
554+
if validated == 0 {
555+
return fmt.Errorf("no summary.txt files found for namespace %s", namespace)
556+
}
557+
558+
return nil
559+
}
560+
491561
func (s *CollectorSuite) TestPT_2453() {
492562
testcmd := []string{"sh", "-c", "tar -tf cluster-dump.tar.gz --wildcards '*/summary.txt' 2>/dev/null | wc -l"}
493563
tests := []struct {

0 commit comments

Comments
 (0)