Skip to content

Commit

Permalink
docker cp instead of methods
Browse files Browse the repository at this point in the history
Signed-off-by: Dhruv-J <[email protected]>
  • Loading branch information
Dhruv-J committed Jul 21, 2023
1 parent 645400b commit 0b719ff
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 100 deletions.
4 changes: 4 additions & 0 deletions ci/kind/test-e2e-kind.sh
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,10 @@ if [[ $cleanup_only == "true" ]];then
$TESTBED_CMD destroy kind
exit 0
fi
if [[ $coverage == "true" ]];then
mkdir -p .coverage/clickhouse-monitor-coverage
mkdir -p .coverage/theia-manager-coverage
fi

trap "quit" INT EXIT

Expand Down
237 changes: 137 additions & 100 deletions test/e2e/framework.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ import (
"io"
"math/big"
"net"
"os"
// "os"
"os/exec"
"path/filepath"
"regexp"
"strconv"
Expand Down Expand Up @@ -1576,107 +1577,147 @@ func (data *TestData) Cleanup(namespaces []string) {
// return nil
// }

func (data *TestData) copyNodeFiles(nodeName, fileName, covDir, covPrefix string) error {
fmt.Println("-------------- copyNodeFiles: node " + nodeName + " has file: " + fileName)
// getNodeWriter creates the file with name nodeName-suffix. It returns nil if the file
// cannot be created. File must be closed by the caller.
getNodeWriter := func(nodeName, fileName, suffix string) *os.File {
covdirabs, err := filepath.Abs("../../" + covDir)
if err != nil {
log.Infof("copyNodeFiles: error creating absolute file path: %v", err)
return nil
}
covFile := filepath.Join(covdirabs, fmt.Sprintf("%s-%s-%s", fileName, nodeName, suffix))
// fmt.Println("_______________ copyNodeFiles covFile: " + covFile)
f, err := os.Create(covFile)
if err != nil {
_ = fmt.Errorf("error when creating coverage file '%s': %v", covFile, err)
// fmt.Println(fmt.Sprintf("_______________ copyNodeFiles: error creating coverage file: %v", err))
return nil
}
if f != nil {
stat, err := f.Stat()
if err != nil && stat.Size() == 0 {
fmt.Println("_______________ copyNodeFiles: file is empty")
return nil
}
fmt.Println("_______________ copyNodeFiles: file is not empty")
} else {
fmt.Println("_______________ copyNodeFiles: file is nil")
}
return f
}
// func (data *TestData) copyNodeFiles(nodeName, fileName, covDir, covPrefix string) error {
// fmt.Println("-------------- copyNodeFiles: node " + nodeName + " has file: " + fileName)
// // getNodeWriter creates the file with name nodeName-suffix. It returns nil if the file
// // cannot be created. File must be closed by the caller.
// getNodeWriter := func(nodeName, fileName, suffix string) *os.File {
// covdirabs, err := filepath.Abs("../../" + covDir)
// if err != nil {
// log.Infof("copyNodeFiles: error creating absolute file path: %v", err)
// return nil
// }
// covFile := filepath.Join(covdirabs, fmt.Sprintf("%s-%s-%s", fileName, nodeName, suffix))
// // fmt.Println("_______________ copyNodeFiles covFile: " + covFile)
// f, err := os.Create(covFile)
// if err != nil {
// _ = fmt.Errorf("error when creating coverage file '%s': %v", covFile, err)
// // fmt.Println(fmt.Sprintf("_______________ copyNodeFiles: error creating coverage file: %v", err))
// return nil
// }
// if f != nil {
// stat, err := f.Stat()
// if err != nil && stat.Size() == 0 {
// fmt.Println("_______________ copyNodeFiles: file is empty")
// return nil
// }
// fmt.Println("_______________ copyNodeFiles: file is not empty")
// } else {
// fmt.Println("_______________ copyNodeFiles: file is nil")
// }
// return f
// }

// dump the file from Antrea Pods to disk.
// a filepath-friendly timestamp format.
const timeFormat = "Jan02-15-04-05"
timeStamp := time.Now().Format(timeFormat)
w := getNodeWriter(nodeName, fileName, timeStamp)
if w == nil {
return fmt.Errorf("error in copyNodeFiles: nodewriter file is null")
} else {
stat, err := w.Stat()
if err != nil && stat.Size() == 0 {
return fmt.Errorf("error in copyNodeFiles: nodewriter file is empty")
}
}
defer w.Close()
fileName = "/var/log/" + covPrefix + "-coverage/" + fileName
cmd := fmt.Sprintf("cat %s", fileName)
fmt.Println("_______________ copyNodeFiles: cat command set")
rc, stdout, stderr, err := data.RunCommandOnNode(nodeName, cmd)
fmt.Printf("|||||| copyNodeFiles stderr: %v \n", stderr)
if err != nil {
return fmt.Errorf("error in copyNodeFiles: %v", err)
}
if rc != 0 && stdout == "" {
fmt.Printf("_______________ copyNodeFiles: cat command stdout empty\n")
os.Remove(w.Name())
return nil
}
w.WriteString(stdout)
fmt.Println("_______________ copyNodeFiles: finished writing string")
return nil
}
// // dump the file from Antrea Pods to disk.
// // a filepath-friendly timestamp format.
// const timeFormat = "Jan02-15-04-05"
// timeStamp := time.Now().Format(timeFormat)
// w := getNodeWriter(nodeName, fileName, timeStamp)
// if w == nil {
// return fmt.Errorf("error in copyNodeFiles: nodewriter file is null")
// } else {
// stat, err := w.Stat()
// if err != nil && stat.Size() == 0 {
// return fmt.Errorf("error in copyNodeFiles: nodewriter file is empty")
// }
// }
// defer w.Close()
// fileName = "/var/log/" + covPrefix + "-coverage/" + fileName
// cmd := fmt.Sprintf("cat %s", fileName)
// fmt.Println("_______________ copyNodeFiles: cat command set")
// rc, stdout, stderr, err := data.RunCommandOnNode(nodeName, cmd)
// fmt.Printf("|||||| copyNodeFiles stderr: %v \n", stderr)
// if err != nil {
// return fmt.Errorf("error in copyNodeFiles: %v", err)
// }
// if rc != 0 && stdout == "" {
// fmt.Printf("_______________ copyNodeFiles: cat command stdout empty\n")
// os.Remove(w.Name())
// return nil
// }
// w.WriteString(stdout)
// fmt.Println("_______________ copyNodeFiles: finished writing string")
// return nil
// }

func (data *TestData) findAndCopyCovFiles(nodeName, podName, covDir, covPrefix string) error {
cmd := "/bin/sh -c find / -name 'covmeta.*' -exec basename {} ';'"
rc, stdout, stderr, err := data.RunCommandOnNode(nodeName, cmd)
var files []string
if err != nil || rc != 0 {
if err != nil && !strings.Contains(err.Error(), "No such file or directory") {
return fmt.Errorf("error when running this find command (for coverage file) '%s' on Node %s, Pod %s, stderr: <%v>, err: <%v>", cmd, nodeName, podName, stderr, err)
}
} else {
stdout = strings.TrimSpace(stdout)
files = strings.Split(stdout, "\n")
fmt.Printf("found meta file at: %v with stdout: %s\n", files, stdout)
}
cmd = "/bin/sh -c find / -name 'covcounters.*' -exec basename {} ';'"
rc, stdout, stderr, err = data.RunCommandOnNode(nodeName, cmd)
if err != nil || rc != 0 {
if err != nil && !strings.Contains(err.Error(), "No such file or directory") {
return fmt.Errorf("error when running this find command (for coverage file) '%s' on Node %s, Pod %s, stderr: <%v>, err: <%v>", cmd, nodeName, podName, stderr, err)
}
} else {
stdout = strings.TrimSpace(stdout)
files = append(files, strings.Split(stdout, "\n")...)
fmt.Printf("found cover file at: %v with stdout: %s\n", strings.Split(stdout, "\n"), stdout)
// func (data *TestData) findAndCopyCovFiles(nodeName, podName, covDir, covPrefix string) error {
// cmd := "/bin/sh -c find / -name 'covmeta.*' -exec basename {} ';'"
// rc, stdout, stderr, err := data.RunCommandOnNode(nodeName, cmd)
// var files []string
// if err != nil || rc != 0 {
// if err != nil && !strings.Contains(err.Error(), "No such file or directory") {
// return fmt.Errorf("error when running this find command (for coverage file) '%s' on Node %s, Pod %s, stderr: <%v>, err: <%v>", cmd, nodeName, podName, stderr, err)
// }
// } else {
// stdout = strings.TrimSpace(stdout)
// files = strings.Split(stdout, "\n")
// fmt.Printf("found meta file at: %v with stdout: %v\n", files, stdout)
// }
// cmd = "/bin/sh -c find / -name 'covcounters.*' -exec basename {} ';'"
// rc, stdout, stderr, err = data.RunCommandOnNode(nodeName, cmd)
// if err != nil || rc != 0 {
// if err != nil && !strings.Contains(err.Error(), "No such file or directory") {
// return fmt.Errorf("error when running this find command (for coverage file) '%s' on Node %s, Pod %s, stderr: <%v>, err: <%v>", cmd, nodeName, podName, stderr, err)
// }
// } else {
// stdout = strings.TrimSpace(stdout)
// files = append(files, strings.Split(stdout, "\n")...)
// fmt.Printf("found cover file at: %v with stdout: %v\n", strings.Split(stdout, "\n"), stdout)
// }
// for _, file := range files {
// if len(file) == 0 {
// continue
// }
// err = data.copyNodeFiles(nodeName, file, covDir, covPrefix)
// if err != nil {
// return fmt.Errorf("error when copying coverage files from Pod '%s' to coverage directory '%s': %v", podName, covDir, err)
// }
// }
// return nil
// }

// func (data *TestData) killProcessesAndCollectCovFiles(namespace, podName, containerName, processName, covDir, covPrefix string) error {
// cmds := []string{"pgrep", "-f", processName}
// stdout, stderr, err := data.RunCommandFromPod(namespace, podName, containerName, cmds)
// if err != nil {
// return fmt.Errorf("error when getting pid of '%s', stderr: <%v>, err: <%v>", processName, stderr, err)
// }
// cmds = []string{"kill", "-SIGINT", strings.TrimSpace(stdout)}
// log.Infof("Sending SIGINT to '%s' with cmd 'kill -SIGINT %s'", processName, strings.TrimSpace(stdout))
// fmt.Println("sending SIGINT")
// _, stderr, err = data.RunCommandFromPod(namespace, podName, containerName, cmds)
// if err != nil {
// return fmt.Errorf("error when sending SIGINT signal to '%s', stderr: <%v>, err: <%v>", processName, stderr, err)
// }
// log.Infof("Copying coverage files from worker nodes kind-worker and kind-worker2")
// if err = data.findAndCopyCovFiles("kind-worker", podName, covDir, covPrefix); err != nil {
// fmt.Println("errored out looking in kind-worker")
// return err
// }
// fmt.Println("did not error out looking in kind-worker")
// if err = data.findAndCopyCovFiles("kind-worker2", podName, covDir, covPrefix); err != nil {
// fmt.Println("errored out looking in kind-worker2")
// return err
// }
// fmt.Println("did not error out looking in kind-worker2")
// return nil
// }

// docker cp kind-worker:/var/log/cm-coverage/. .coverage/clickhouse-monitor-coverage/
func (data *TestData) copyCovFolder(nodeName, covDir, covPrefix string) error {
covDirAbs, err := filepath.Abs("../../" + covDir)
if err != nil {
return fmt.Errorf("copyCovFolder: error creating absolute file path: %v", err)
}
for _, file := range files {
if len(file) == 0 {
continue
}
err = data.copyNodeFiles(nodeName, file, covDir, covPrefix)
if err != nil {
return fmt.Errorf("error when copying coverage files from Pod '%s' to coverage directory '%s': %v", podName, covDir, err)
cmd := exec.Command("docker", "cp", nodeName+":"+"/var/log/"+covPrefix+"-coverage/.", covDirAbs);
if err := cmd.Run(); err != nil {
if !strings.Contains(err.Error(), "exit status 1") {
return fmt.Errorf("error while running docker cp command[%v] from node: %s: %v", cmd, nodeName, err)
}
}
return nil
}

// func (data *TestData) copyCovFolder

func (data *TestData) killProcessesAndCollectCovFiles(namespace, podName, containerName, processName, covDir, covPrefix string) error {
cmds := []string{"pgrep", "-f", processName}
stdout, stderr, err := data.RunCommandFromPod(namespace, podName, containerName, cmds)
Expand All @@ -1691,16 +1732,12 @@ func (data *TestData) killProcessesAndCollectCovFiles(namespace, podName, contai
return fmt.Errorf("error when sending SIGINT signal to '%s', stderr: <%v>, err: <%v>", processName, stderr, err)
}
log.Infof("Copying coverage files from worker nodes kind-worker and kind-worker2")
if err = data.findAndCopyCovFiles("kind-worker", podName, covDir, covPrefix); err != nil {
fmt.Println("errored out looking in kind-worker")
if err = data.copyCovFolder("kind-worker", covDir, covPrefix); err != nil {
return err
}
fmt.Println("did not error out looking in kind-worker")
if err = data.findAndCopyCovFiles("kind-worker2", podName, covDir, covPrefix); err != nil {
fmt.Println("errored out looking in kind-worker2")
if err = data.copyCovFolder("kind-worker2", covDir, covPrefix); err != nil {
return err
}
fmt.Println("did not error out looking in kind-worker2")
return nil
}

Expand Down

0 comments on commit 0b719ff

Please sign in to comment.