in internal/testers/ginkgov1/package.go [83:153]
func (t *Tester) extractBinaries(downloadPath string) error {
// ensure the artifacts dir
if err := os.MkdirAll(artifacts.BaseDir(), os.ModePerm); err != nil {
return err
}
// ensure the rundir
if err := os.MkdirAll(artifacts.RunDir(), os.ModePerm); err != nil {
return err
}
// Extract files from the test package
f, err := os.Open(downloadPath)
if err != nil {
return fmt.Errorf("failed to open downloaded tar at %s: %s", downloadPath, err)
}
defer f.Close()
gzf, err := gzip.NewReader(f)
if err != nil {
return fmt.Errorf("failed to create gzip reader: %s", err)
}
defer gzf.Close()
tarReader := tar.NewReader(gzf)
// Map of paths in archive to destination paths
t.e2eTestPath = filepath.Join(artifacts.RunDir(), "e2e.test")
t.ginkgoPath = filepath.Join(artifacts.RunDir(), "ginkgo")
extract := map[string]string{
"kubernetes/test/bin/e2e.test": t.e2eTestPath,
"kubernetes/test/bin/ginkgo": t.ginkgoPath,
}
extracted := map[string]bool{}
for {
if len(extracted) == len(extract) {
break
}
header, err := tarReader.Next()
if err == io.EOF {
break
}
if err != nil {
return fmt.Errorf("error during tar read: %s", err)
}
if dest := extract[header.Name]; dest != "" {
outFile, err := os.Create(dest)
if err != nil {
return fmt.Errorf("error creating file at %s: %s", dest, err)
}
defer outFile.Close()
if err := outFile.Chmod(0700); err != nil {
return fmt.Errorf("failed to make %s executable: %s", dest, err)
}
if _, err := io.Copy(outFile, tarReader); err != nil {
return fmt.Errorf("error reading data from tar with header name %s: %s", header.Name, err)
}
extracted[header.Name] = true
}
}
for k := range extract {
if !extracted[k] {
return fmt.Errorf("failed to find %s in %s", k, downloadPath)
}
}
return nil
}