Skip to content

Commit

Permalink
chore: fix some SonarQube issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Roming22 committed Dec 9, 2024
1 parent 9d9e568 commit a85ad0e
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 73 deletions.
36 changes: 20 additions & 16 deletions pkg/engine/funcs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,21 @@ import (
"testing"
)

const emptyInput = "empty input"
const validInput = "valid input"
const invalidInput = "invalid input"

func TestToYAML(t *testing.T) {
tests := []struct {
name string
input interface{}
expected string
}{{
name: "empty input",
name: emptyInput,
input: nil,
expected: "null",
}, {
name: "valid input",
name: validInput,
input: map[string]interface{}{
"key1": "value1",
"key2": 123,
Expand All @@ -41,20 +45,20 @@ func TestFromYAML(t *testing.T) {
expected map[string]interface{}
wantErr bool
}{{
name: "empty input",
name: emptyInput,
input: "",
expected: map[string]interface{}{},
wantErr: false,
}, {
name: "valid input",
name: validInput,
input: "key1: value1\nkey2: 123",
expected: map[string]interface{}{
"key1": "value1",
"key2": 123,
},
wantErr: false,
}, {
name: "invalid input",
name: invalidInput,
input: `invalid yaml`,
wantErr: true,
}}
Expand All @@ -80,17 +84,17 @@ func TestFromYAMLArray(t *testing.T) {
expected []interface{}
wantErr bool
}{{
name: "empty input",
name: emptyInput,
input: "",
expected: []interface{}{},
wantErr: false,
}, {
name: "valid input",
name: validInput,
input: "- value1\n- 123\n- true",
expected: []interface{}{"value1", 123, true},
wantErr: false,
}, {
name: "invalid input",
name: invalidInput,
input: "invalid yaml",
wantErr: true,
}}
Expand All @@ -117,11 +121,11 @@ func TestToJSON(t *testing.T) {
input interface{}
expected string
}{{
name: "empty input",
name: emptyInput,
input: nil,
expected: "null",
}, {
name: "valid input",
name: validInput,
input: map[string]interface{}{
"key1": "value1",
"key2": 123,
Expand All @@ -146,17 +150,17 @@ func TestFromJSON(t *testing.T) {
expected map[string]interface{}
wantErr bool
}{{
name: "empty input",
name: emptyInput,
input: "{}",
expected: map[string]interface{}{},
wantErr: false,
}, {
name: "valid input",
name: validInput,
input: `{"key1":"value1"}`,
expected: map[string]interface{}{"key1": "value1"},
wantErr: false,
}, {
name: "invalid input",
name: invalidInput,
input: `invalid json`,
wantErr: true,
}}
Expand All @@ -182,17 +186,17 @@ func TestFromJSONArray(t *testing.T) {
expected []interface{}
wantErr bool
}{{
name: "empty input",
name: emptyInput,
input: "[]",
expected: []interface{}{},
wantErr: false,
}, {
name: "valid input",
name: validInput,
input: `["value1", "value2"]`,
expected: []interface{}{"value1", "value2"},
wantErr: false,
}, {
name: "invalid input",
name: invalidInput,
input: "invalid json",
wantErr: true,
}}
Expand Down
139 changes: 82 additions & 57 deletions pkg/subcmd/installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,80 +104,105 @@ func (i *Installer) listResources() error {
return nil
}

// extractResources extracts the embedded resources into a the base directory.
// extractResources extracts the embedded resources into the base directory.
func (i *Installer) extractResources() error {
tr := tar.NewReader(bytes.NewReader(installer.InstallerTarball))

for {
header, err := tr.Next()
if err != nil {
if err == io.EOF {
break
}
if err == io.EOF {
break
} else if err != nil {
return err
}

target := filepath.Join(i.extract, header.Name)

// Creating the base directory if it does not exist.
baseDir := filepath.Dir(target)
if _, err := os.Stat(baseDir); os.IsNotExist(err) {
fmt.Printf("- Creating base directory %q\n", baseDir)
if err := os.MkdirAll(baseDir, dirMode); err != nil {
return err
}
err = i.extractResource(target, header, tr)
if err != nil {
return err
}
}
return nil
}

switch header.Typeflag {
case tar.TypeDir:
fmt.Printf("- Creating directory %q\n", target)
if err := os.MkdirAll(target, dirMode); err != nil {
return err
}
case tar.TypeReg:
fmt.Printf("- Extracting %q\n", target)
f, err := os.OpenFile(
target,
os.O_CREATE|os.O_WRONLY|os.O_TRUNC,
os.FileMode(header.Mode),
)
if err != nil {
return err
}
defer f.Close()
// extractResource extracts an embedded resource into the base directory.
func (i *Installer) extractResource(target string, header *tar.Header, tr *tar.Reader) error {

if _, err := io.Copy(f, tr); err != nil {
return err
}
case tar.TypeSymlink:
// Checking for existing symlinks and removing them if they point to a
// different target location.
if existingTarget, err := os.Readlink(target); err == nil {
if existingTarget == header.Linkname {
fmt.Printf(
"- Symlink %q already exists and points to %q\n",
target,
header.Linkname,
)
continue
} else {
// Removing the existing symlink if it points to a different
// target.
if err := os.Remove(target); err != nil {
return err
}
}
} else if !os.IsNotExist(err) {
return err
}
// Creating the base directory if it does not exist.
baseDir := filepath.Dir(target)
if _, err := os.Stat(baseDir); os.IsNotExist(err) {
fmt.Printf("- Creating base directory %q\n", baseDir)
if err := os.MkdirAll(baseDir, dirMode); err != nil {
return err
}
}

switch header.Typeflag {
case tar.TypeDir:
fmt.Printf("- Creating directory %q\n", target)
if err := os.MkdirAll(target, dirMode); err != nil {
return err
}
case tar.TypeReg:
if err := i.extractFile(target, header, tr); err != nil {
return err
}
case tar.TypeSymlink:
if err := i.extractSymlink(target, header); err != nil {
return err
}
default:
log.Printf("Unsupported type: %v in %s", header.Typeflag, header.Name)
}
return nil
}

fmt.Printf("- Creating symlink %q -> %q\n", target, header.Linkname)
if err := os.Symlink(header.Linkname, target); err != nil {
// extractFile extracts an embedded file into the base directory.
func (i *Installer) extractFile(target string, header *tar.Header, tr *tar.Reader) error {
fmt.Printf("- Extracting %q\n", target)
f, err := os.OpenFile(
target,
os.O_CREATE|os.O_WRONLY|os.O_TRUNC,
os.FileMode(header.Mode),
)
if err != nil {
return err
}
defer f.Close()

if _, err := io.Copy(f, tr); err != nil {
return err
}
return nil
}

// extractSymlink extracts an embedded symlink into the base directory.
func (i *Installer) extractSymlink(target string, header *tar.Header) error {
// Checking for existing symlinks and removing them if they point to a
// different target location.
if existingTarget, err := os.Readlink(target); err == nil {
if existingTarget == header.Linkname {
fmt.Printf(
"- Symlink %q already exists and points to %q\n",
target,
header.Linkname,
)
return nil
} else {
// Removing the existing symlink if it points to a different
// target.
if err := os.Remove(target); err != nil {
return err
}
default:
log.Printf("Unsupported type: %v in %s", header.Typeflag, header.Name)
}
} else if !os.IsNotExist(err) {
return err
}

fmt.Printf("- Creating symlink %q -> %q\n", target, header.Linkname)
if err := os.Symlink(header.Linkname, target); err != nil {
return err
}
return nil
}
Expand Down

0 comments on commit a85ad0e

Please sign in to comment.