From d08180e926bb35dc4477245aba85c93cafbeda67 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:10:04 -0500 Subject: [PATCH 01/18] added additional rpm handling --- pkg/build/build.go | 4 +- pkg/build/rpm.go | 65 +++++++++-- pkg/build/rpm_test.go | 109 ++++++++++++++++++- pkg/build/scripts/rpms/10_rpm_install.sh.tpl | 7 ++ 4 files changed, 171 insertions(+), 14 deletions(-) create mode 100644 pkg/build/scripts/rpms/10_rpm_install.sh.tpl diff --git a/pkg/build/build.go b/pkg/build/build.go index 6bbe2716..ccba40b3 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -44,9 +44,9 @@ func (b *Builder) Build() error { return fmt.Errorf("generating combustion script: %w", err) } - err = b.copyRPMs() + err = b.processRPMs() if err != nil { - return fmt.Errorf("copying RPMs over: %w", err) + return fmt.Errorf("processing rpms: %w", err) } switch b.imageConfig.Image.ImageType { diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index be556776..9aa6bd75 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -1,13 +1,22 @@ package build import ( + _ "embed" "fmt" "os" "path/filepath" "github.com/suse-edge/edge-image-builder/pkg/fileio" + "strings" ) +const ( + modifyRPMScriptName = "10_rpm_install.sh" +) + +//go:embed scripts/rpms/10_rpm_install.sh.tpl +var modifyRPMScript string + func (b *Builder) getRPMFileNames(rpmSourceDir string) ([]string, error) { var rpmFileNames []string @@ -29,9 +38,23 @@ func (b *Builder) getRPMFileNames(rpmSourceDir string) ([]string, error) { return rpmFileNames, nil } -func (b *Builder) copyRPMs() error { - rpmSourceDir := filepath.Join(b.context.ImageConfigDir, "rpms") - // Only proceed with copying the RPMs if the directory exists +func (b *Builder) copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) error { + for _, rpm := range rpmFileNames { + sourcePath := filepath.Join(rpmSourceDir, rpm) + destPath := filepath.Join(rpmDestDir, rpm) + + err := fileio.CopyFile(sourcePath, destPath) + if err != nil { + return fmt.Errorf("copying file %s: %w", sourcePath, err) + } + } + + return nil +} + +func (b *Builder) processRPMs() error { + rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") + // Only proceed with processing the RPMs if the directory exists _, err := os.Stat(rpmSourceDir) if err != nil { if os.IsNotExist(err) { @@ -46,15 +69,37 @@ func (b *Builder) copyRPMs() error { return fmt.Errorf("getting rpm file names: %w", err) } - for _, rpm := range rpmFileNames { - sourcePath := filepath.Join(rpmSourceDir, rpm) - destPath := filepath.Join(rpmDestDir, rpm) + err = b.copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) + if err != nil { + return fmt.Errorf("copying RPMs over: %w", err) + } - err = fileio.CopyFile(sourcePath, destPath) - if err != nil { - return fmt.Errorf("copying file %s: %w", sourcePath, err) - } + err = b.writeRPMScript(rpmFileNames) + if err != nil { + return fmt.Errorf("writing the rpm install script: %w", err) } return nil } + +func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { + rpmFileNamesString := strings.Join(rpmFileNamesArray, " ") + values := struct { + RPMs string + }{ + RPMs: rpmFileNamesString, + } + + writtenFilename, err := b.writeCombustionFile(modifyRPMScriptName, modifyRPMScript, &values) + if err != nil { + return fmt.Errorf("writing rpm script %s: %w", modifyRPMScriptName, err) + } + err = os.Chmod(writtenFilename, modifyScriptMode) + if err != nil { + return fmt.Errorf("changing permissions on the rpm script %s: %w", modifyRPMScriptName, err) + } + + b.registerCombustionScript(modifyRPMScriptName) + + return nil +} diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index 9866ecb1..e096f4d8 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -1,6 +1,7 @@ package build import ( + "io/fs" "os" "path/filepath" "testing" @@ -71,8 +72,11 @@ func TestCopyRPMs(t *testing.T) { file2, err := os.Create(file2Path) require.NoError(t, err) + rpmFileNames, err := builder.getRPMFileNames(rpmSourceDir) + require.NoError(t, err) + // Test - err = builder.copyRPMs() + err = builder.copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) // Verify require.NoError(t, err) @@ -123,9 +127,110 @@ func TestCopyRPMsNoRPMDir(t *testing.T) { context: context, } + rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") + rpmDestDir := builder.combustionDir + + // Test + err = builder.copyRPMs(rpmSourceDir, rpmDestDir, nil) + + // Verify + require.NoError(t, err) +} + +func TestWriteRPMScript(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + buildConfig := config.BuildConfig{ + ImageConfigDir: "../config/testdata", + } + builder := New(nil, &buildConfig) + require.NoError(t, builder.prepareBuildDir()) + + rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") + + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") + defer os.Remove(file1Path) + file1, err := os.Create(file1Path) + require.NoError(t, err) + + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") + defer os.Remove(file2Path) + file2, err := os.Create(file2Path) + require.NoError(t, err) + + rpmFileNames, err := builder.getRPMFileNames(rpmSourceDir) + require.NoError(t, err) + + // Test + err = builder.writeRPMScript(rpmFileNames) + + // Verify + require.NoError(t, err) + + expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + stats, err := os.Stat(expectedFilename) + require.NoError(t, err) + assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestProcessRPMs(t *testing.T) { + // Setup + bc := config.BuildConfig{ + ImageConfigDir: "../config/testdata", + } + builder := New(nil, &bc) + err := builder.prepareBuildDir() + require.NoError(t, err) + defer os.Remove(builder.eibBuildDir) + + rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") + rpmDestDir := builder.combustionDir + + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") + defer os.Remove(file1Path) + file1, err := os.Create(file1Path) + require.NoError(t, err) + + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") + defer os.Remove(file2Path) + file2, err := os.Create(file2Path) + require.NoError(t, err) + // Test - err = builder.copyRPMs() + err = builder.processRPMs() // Verify require.NoError(t, err) + + _, err = os.Stat(filepath.Join(rpmDestDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(rpmDestDir, "rpm2.rpm")) + require.NoError(t, err) + + expectedFilename := filepath.Join(rpmDestDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) } diff --git a/pkg/build/scripts/rpms/10_rpm_install.sh.tpl b/pkg/build/scripts/rpms/10_rpm_install.sh.tpl new file mode 100644 index 00000000..01249187 --- /dev/null +++ b/pkg/build/scripts/rpms/10_rpm_install.sh.tpl @@ -0,0 +1,7 @@ +#!/bin/bash +set -euo pipefail + +# Template Fields +# RPMs - A string that contains all of the rpms present in the user created config directory, separated by spaces. + +rpm -ivh --nosignature {{.RPMs}} \ No newline at end of file From 8fc35390239c8fc27ce7f18fb2400bec6eccec6b Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:01:19 -0500 Subject: [PATCH 02/18] remove random print --- pkg/build/rpm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index 9aa6bd75..ce01a402 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -98,7 +98,7 @@ func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { if err != nil { return fmt.Errorf("changing permissions on the rpm script %s: %w", modifyRPMScriptName, err) } - + b.registerCombustionScript(modifyRPMScriptName) return nil From 5f6601391733778dcdd1097f760e9a79aaa41b4f Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:03:31 -0500 Subject: [PATCH 03/18] reorganized rpm.go --- pkg/build/rpm.go | 210 +++++++++++++++++++++++------------------------ 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index ce01a402..cebcbcd8 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -1,105 +1,105 @@ -package build - -import ( - _ "embed" - "fmt" - "os" - "path/filepath" - - "github.com/suse-edge/edge-image-builder/pkg/fileio" - "strings" -) - -const ( - modifyRPMScriptName = "10_rpm_install.sh" -) - -//go:embed scripts/rpms/10_rpm_install.sh.tpl -var modifyRPMScript string - -func (b *Builder) getRPMFileNames(rpmSourceDir string) ([]string, error) { - var rpmFileNames []string - - rpms, err := os.ReadDir(rpmSourceDir) - if err != nil { - return nil, fmt.Errorf("reading rpm source dir: %w", err) - } - - for _, rpmFile := range rpms { - if filepath.Ext(rpmFile.Name()) == ".rpm" { - rpmFileNames = append(rpmFileNames, rpmFile.Name()) - } - } - - if len(rpmFileNames) == 0 { - return nil, fmt.Errorf("no rpms found") - } - - return rpmFileNames, nil -} - -func (b *Builder) copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) error { - for _, rpm := range rpmFileNames { - sourcePath := filepath.Join(rpmSourceDir, rpm) - destPath := filepath.Join(rpmDestDir, rpm) - - err := fileio.CopyFile(sourcePath, destPath) - if err != nil { - return fmt.Errorf("copying file %s: %w", sourcePath, err) - } - } - - return nil -} - -func (b *Builder) processRPMs() error { - rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") - // Only proceed with processing the RPMs if the directory exists - _, err := os.Stat(rpmSourceDir) - if err != nil { - if os.IsNotExist(err) { - return nil - } - return fmt.Errorf("checking for rpm directory at %s: %w", rpmSourceDir, err) - } - rpmDestDir := b.context.CombustionDir - - rpmFileNames, err := b.getRPMFileNames(rpmSourceDir) - if err != nil { - return fmt.Errorf("getting rpm file names: %w", err) - } - - err = b.copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) - if err != nil { - return fmt.Errorf("copying RPMs over: %w", err) - } - - err = b.writeRPMScript(rpmFileNames) - if err != nil { - return fmt.Errorf("writing the rpm install script: %w", err) - } - - return nil -} - -func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { - rpmFileNamesString := strings.Join(rpmFileNamesArray, " ") - values := struct { - RPMs string - }{ - RPMs: rpmFileNamesString, - } - - writtenFilename, err := b.writeCombustionFile(modifyRPMScriptName, modifyRPMScript, &values) - if err != nil { - return fmt.Errorf("writing rpm script %s: %w", modifyRPMScriptName, err) - } - err = os.Chmod(writtenFilename, modifyScriptMode) - if err != nil { - return fmt.Errorf("changing permissions on the rpm script %s: %w", modifyRPMScriptName, err) - } - - b.registerCombustionScript(modifyRPMScriptName) - - return nil -} +package build + +import ( + _ "embed" + "fmt" + "os" + "path/filepath" + + "github.com/suse-edge/edge-image-builder/pkg/fileio" + "strings" +) + +const ( + modifyRPMScriptName = "10_rpm_install.sh" +) + +//go:embed scripts/rpms/10_rpm_install.sh.tpl +var modifyRPMScript string + +func (b *Builder) processRPMs() error { + rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") + // Only proceed with processing the RPMs if the directory exists + _, err := os.Stat(rpmSourceDir) + if err != nil { + if os.IsNotExist(err) { + return nil + } + return fmt.Errorf("checking for rpm directory at %s: %w", rpmSourceDir, err) + } + rpmDestDir := b.combustionDir + + rpmFileNames, err := b.getRPMFileNames(rpmSourceDir) + if err != nil { + return fmt.Errorf("getting rpm file names: %w", err) + } + + err = b.copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) + if err != nil { + return fmt.Errorf("copying RPMs over: %w", err) + } + + err = b.writeRPMScript(rpmFileNames) + if err != nil { + return fmt.Errorf("writing the rpm install script: %w", err) + } + + return nil +} + +func (b *Builder) getRPMFileNames(rpmSourceDir string) ([]string, error) { + var rpmFileNames []string + + rpms, err := os.ReadDir(rpmSourceDir) + if err != nil { + return nil, fmt.Errorf("reading rpm source dir: %w", err) + } + + for _, rpmFile := range rpms { + if filepath.Ext(rpmFile.Name()) == ".rpm" { + rpmFileNames = append(rpmFileNames, rpmFile.Name()) + } + } + + if len(rpmFileNames) == 0 { + return nil, fmt.Errorf("no rpms found") + } + + return rpmFileNames, nil +} + +func (b *Builder) copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) error { + for _, rpm := range rpmFileNames { + sourcePath := filepath.Join(rpmSourceDir, rpm) + destPath := filepath.Join(rpmDestDir, rpm) + + err := fileio.CopyFile(sourcePath, destPath) + if err != nil { + return fmt.Errorf("copying file %s: %w", sourcePath, err) + } + } + + return nil +} + +func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { + rpmFileNamesString := strings.Join(rpmFileNamesArray, " ") + values := struct { + RPMs string + }{ + RPMs: rpmFileNamesString, + } + + writtenFilename, err := b.writeCombustionFile(modifyRPMScriptName, modifyRPMScript, &values) + if err != nil { + return fmt.Errorf("writing rpm script %s: %w", modifyRPMScriptName, err) + } + err = os.Chmod(writtenFilename, modifyScriptMode) + if err != nil { + return fmt.Errorf("changing permissions on the rpm script %s: %w", modifyRPMScriptName, err) + } + + b.registerCombustionScript(modifyRPMScriptName) + + return nil +} From bc69a9783cb0c988300578948974562d4e1a668d Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Mon, 13 Nov 2023 19:07:06 -0500 Subject: [PATCH 04/18] updates based on feedback let me know if this is what you were meaning, I could have misinterpreted when it came to the rpm path part --- pkg/build/rpm.go | 219 +++++++++--------- pkg/build/rpm_test.go | 504 ++++++++++++++++++++++-------------------- 2 files changed, 382 insertions(+), 341 deletions(-) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index cebcbcd8..e0541d25 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -1,105 +1,114 @@ -package build - -import ( - _ "embed" - "fmt" - "os" - "path/filepath" - - "github.com/suse-edge/edge-image-builder/pkg/fileio" - "strings" -) - -const ( - modifyRPMScriptName = "10_rpm_install.sh" -) - -//go:embed scripts/rpms/10_rpm_install.sh.tpl -var modifyRPMScript string - -func (b *Builder) processRPMs() error { - rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") - // Only proceed with processing the RPMs if the directory exists - _, err := os.Stat(rpmSourceDir) - if err != nil { - if os.IsNotExist(err) { - return nil - } - return fmt.Errorf("checking for rpm directory at %s: %w", rpmSourceDir, err) - } - rpmDestDir := b.combustionDir - - rpmFileNames, err := b.getRPMFileNames(rpmSourceDir) - if err != nil { - return fmt.Errorf("getting rpm file names: %w", err) - } - - err = b.copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) - if err != nil { - return fmt.Errorf("copying RPMs over: %w", err) - } - - err = b.writeRPMScript(rpmFileNames) - if err != nil { - return fmt.Errorf("writing the rpm install script: %w", err) - } - - return nil -} - -func (b *Builder) getRPMFileNames(rpmSourceDir string) ([]string, error) { - var rpmFileNames []string - - rpms, err := os.ReadDir(rpmSourceDir) - if err != nil { - return nil, fmt.Errorf("reading rpm source dir: %w", err) - } - - for _, rpmFile := range rpms { - if filepath.Ext(rpmFile.Name()) == ".rpm" { - rpmFileNames = append(rpmFileNames, rpmFile.Name()) - } - } - - if len(rpmFileNames) == 0 { - return nil, fmt.Errorf("no rpms found") - } - - return rpmFileNames, nil -} - -func (b *Builder) copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) error { - for _, rpm := range rpmFileNames { - sourcePath := filepath.Join(rpmSourceDir, rpm) - destPath := filepath.Join(rpmDestDir, rpm) - - err := fileio.CopyFile(sourcePath, destPath) - if err != nil { - return fmt.Errorf("copying file %s: %w", sourcePath, err) - } - } - - return nil -} - -func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { - rpmFileNamesString := strings.Join(rpmFileNamesArray, " ") - values := struct { - RPMs string - }{ - RPMs: rpmFileNamesString, - } - - writtenFilename, err := b.writeCombustionFile(modifyRPMScriptName, modifyRPMScript, &values) - if err != nil { - return fmt.Errorf("writing rpm script %s: %w", modifyRPMScriptName, err) - } - err = os.Chmod(writtenFilename, modifyScriptMode) - if err != nil { - return fmt.Errorf("changing permissions on the rpm script %s: %w", modifyRPMScriptName, err) - } - - b.registerCombustionScript(modifyRPMScriptName) - - return nil -} +package build + +import ( + _ "embed" + "fmt" + "os" + "path/filepath" + + "github.com/suse-edge/edge-image-builder/pkg/fileio" + "strings" +) + +const ( + modifyRPMScriptName = "10_rpm_install.sh" +) + +//go:embed scripts/rpms/10_rpm_install.sh.tpl +var modifyRPMScript string + +func (b *Builder) processRPMs() error { + rpmSourceDir, err := b.generateRPMPath() + if err != nil { + return fmt.Errorf("generating rpm path: %w", err) + } + rpmDestDir := b.combustionDir + + rpmFileNames, err := getRPMFileNames(rpmSourceDir) + if err != nil { + return fmt.Errorf("getting rpm file names: %w", err) + } + + err = copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) + if err != nil { + return fmt.Errorf("copying RPMs over: %w", err) + } + + err = b.writeRPMScript(rpmFileNames) + if err != nil { + return fmt.Errorf("writing the rpm install script: %w", err) + } + + return nil +} + +func getRPMFileNames(rpmSourceDir string) ([]string, error) { + var rpmFileNames []string + + rpms, err := os.ReadDir(rpmSourceDir) + if err != nil { + return nil, fmt.Errorf("reading rpm source dir: %w", err) + } + + for _, rpmFile := range rpms { + if filepath.Ext(rpmFile.Name()) == ".rpm" { + rpmFileNames = append(rpmFileNames, rpmFile.Name()) + } + } + + if len(rpmFileNames) == 0 { + return nil, fmt.Errorf("no rpms found") + } + + return rpmFileNames, nil +} + +func copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) error { + for _, rpm := range rpmFileNames { + sourcePath := filepath.Join(rpmSourceDir, rpm) + destPath := filepath.Join(rpmDestDir, rpm) + + err := fileio.CopyFile(sourcePath, destPath) + if err != nil { + return fmt.Errorf("copying file %s: %w", sourcePath, err) + } + } + + return nil +} + +func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { + rpmFileNamesString := strings.Join(rpmFileNamesArray, " ") + values := struct { + RPMs string + }{ + RPMs: rpmFileNamesString, + } + + writtenFilename, err := b.writeCombustionFile(modifyRPMScriptName, modifyRPMScript, &values) + if err != nil { + return fmt.Errorf("writing rpm script %s: %w", modifyRPMScriptName, err) + } + err = os.Chmod(writtenFilename, modifyScriptMode) + if err != nil { + return fmt.Errorf("changing permissions on the rpm script %s: %w", modifyRPMScriptName, err) + } + + b.registerCombustionScript(modifyRPMScriptName) + + return nil +} + +func (b *Builder) generateRPMPath() (string, error) { + rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") + // Only proceed with processing the RPMs if the directory exists + _, err := os.Stat(rpmSourceDir) + if err != nil { + if os.IsNotExist(err) { + return "", nil + } + return "", fmt.Errorf("checking for rpm directory at %s: %w", rpmSourceDir, err) + } + + return rpmSourceDir, nil +} diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index e096f4d8..ea1bc661 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -1,236 +1,268 @@ -package build - -import ( - "io/fs" - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestGetRPMFileNames(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - rpmSourceDir := filepath.Join(context.ImageConfigDir, "rpms") - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - defer os.Remove(file1Path) - file1, err := os.Create(file1Path) - require.NoError(t, err) - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - defer os.Remove(file2Path) - file2, err := os.Create(file2Path) - require.NoError(t, err) - - // Test - rpmFileNames, err := builder.getRPMFileNames(rpmSourceDir) - - // Verify - require.NoError(t, err) - - assert.Contains(t, rpmFileNames, "rpm1.rpm") - assert.Contains(t, rpmFileNames, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestCopyRPMs(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - rpmSourceDir := filepath.Join(context.ImageConfigDir, "rpms") - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - defer os.Remove(file1Path) - file1, err := os.Create(file1Path) - require.NoError(t, err) - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - defer os.Remove(file2Path) - file2, err := os.Create(file2Path) - require.NoError(t, err) - - rpmFileNames, err := builder.getRPMFileNames(rpmSourceDir) - require.NoError(t, err) - - // Test - err = builder.copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) - - // Verify - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm1.rpm")) - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm2.rpm")) - require.NoError(t, err) - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestGetRPMFileNamesNoRPMs(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - rpmSourceDir := filepath.Join(context.ImageConfigDir, "rpms") - - // Test - rpmFileNames, err := builder.getRPMFileNames(rpmSourceDir) - - // Verify - require.ErrorContains(t, err, "no rpms found") - - assert.Empty(t, rpmFileNames) -} - -func TestCopyRPMsNoRPMDir(t *testing.T) { - // Setup - context, err := NewContext("../config/ThisDirDoesNotExist", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") - rpmDestDir := builder.combustionDir - - // Test - err = builder.copyRPMs(rpmSourceDir, rpmDestDir, nil) - - // Verify - require.NoError(t, err) -} - -func TestWriteRPMScript(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - buildConfig := config.BuildConfig{ - ImageConfigDir: "../config/testdata", - } - builder := New(nil, &buildConfig) - require.NoError(t, builder.prepareBuildDir()) - - rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - defer os.Remove(file1Path) - file1, err := os.Create(file1Path) - require.NoError(t, err) - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - defer os.Remove(file2Path) - file2, err := os.Create(file2Path) - require.NoError(t, err) - - rpmFileNames, err := builder.getRPMFileNames(rpmSourceDir) - require.NoError(t, err) - - // Test - err = builder.writeRPMScript(rpmFileNames) - - // Verify - require.NoError(t, err) - - expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) - foundBytes, err := os.ReadFile(expectedFilename) - require.NoError(t, err) - - stats, err := os.Stat(expectedFilename) - require.NoError(t, err) - assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) - - foundContents := string(foundBytes) - assert.Contains(t, foundContents, "rpm1.rpm") - assert.Contains(t, foundContents, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestProcessRPMs(t *testing.T) { - // Setup - bc := config.BuildConfig{ - ImageConfigDir: "../config/testdata", - } - builder := New(nil, &bc) - err := builder.prepareBuildDir() - require.NoError(t, err) - defer os.Remove(builder.eibBuildDir) - - rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") - rpmDestDir := builder.combustionDir - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - defer os.Remove(file1Path) - file1, err := os.Create(file1Path) - require.NoError(t, err) - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - defer os.Remove(file2Path) - file2, err := os.Create(file2Path) - require.NoError(t, err) - - // Test - err = builder.processRPMs() - - // Verify - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(rpmDestDir, "rpm1.rpm")) - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(rpmDestDir, "rpm2.rpm")) - require.NoError(t, err) - - expectedFilename := filepath.Join(rpmDestDir, modifyRPMScriptName) - foundBytes, err := os.ReadFile(expectedFilename) - require.NoError(t, err) - - foundContents := string(foundBytes) - assert.Contains(t, foundContents, "rpm1.rpm") - assert.Contains(t, foundContents, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} +package build + +import ( + "io/fs" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGetRPMFileNames(t *testing.T) { + // Setup + context, err := NewContext("../config/testdata", "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := &Builder{ + context: context, + } + + rpmSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer os.Remove(file1Path) + + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer os.Remove(file2Path) + + // Test + rpmFileNames, err := getRPMFileNames(rpmSourceDir) + + // Verify + require.NoError(t, err) + + assert.Contains(t, rpmFileNames, "rpm1.rpm") + assert.Contains(t, rpmFileNames, "rpm2.rpm") + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestCopyRPMs(t *testing.T) { + // Setup + context, err := NewContext("../config/testdata", "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := &Builder{ + context: context, + } + + rpmDestDir := builder.combustionDir + rpmSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer os.Remove(file1Path) + + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer os.Remove(file2Path) + + rpmFileNames, err := getRPMFileNames(rpmSourceDir) + require.NoError(t, err) + + // Test + err = copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) + + // Verify + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm2.rpm")) + require.NoError(t, err) + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestGetRPMFileNamesNoRPMs(t *testing.T) { + // Setup + context, err := NewContext("../config/testdata", "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := &Builder{ + context: context, + } + + rpmSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + // Test + rpmFileNames, err := getRPMFileNames(rpmSourceDir) + + // Verify + require.ErrorContains(t, err, "no rpms found") + + assert.Empty(t, rpmFileNames) +} + +func TestCopyRPMsNoRPMDir(t *testing.T) { + // Setup + context, err := NewContext("../config/ThisDirDoesNotExist", "", true) + require.NoError(t, err) + defer os.Remove(builder.eibBuildDir) + + rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") + rpmDestDir := builder.combustionDir + rpmSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + // Test + err = copyRPMs(rpmSourceDir, rpmDestDir, nil) + + // Verify + require.NoError(t, err) +} + +func TestWriteRPMScript(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + buildConfig := config.BuildConfig{ + ImageConfigDir: "../config/testdata", + } + builder := New(nil, &buildConfig) + require.NoError(t, builder.prepareBuildDir()) + + rpmSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer os.Remove(file1Path) + + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer os.Remove(file2Path) + + rpmFileNames, err := getRPMFileNames(rpmSourceDir) + require.NoError(t, err) + + // Test + err = builder.writeRPMScript(rpmFileNames) + + // Verify + require.NoError(t, err) + + expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + stats, err := os.Stat(expectedFilename) + require.NoError(t, err) + assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestProcessRPMs(t *testing.T) { + // Setup + bc := config.BuildConfig{ + ImageConfigDir: "../config/testdata", + } + builder := New(nil, &bc) + err := builder.prepareBuildDir() + require.NoError(t, err) + defer os.Remove(builder.eibBuildDir) + + rpmDestDir := builder.combustionDir + rpmSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer os.Remove(file1Path) + + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer os.Remove(file2Path) + + // Test + err = builder.processRPMs() + + // Verify + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(rpmDestDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(rpmDestDir, "rpm2.rpm")) + require.NoError(t, err) + + expectedFilename := filepath.Join(rpmDestDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestGenerateRPMPath(t *testing.T) { + // Setup + bc := config.BuildConfig{ + ImageConfigDir: "../config/testdata", + } + builder := New(nil, &bc) + + expectedPath := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") + + // Test + generatedPath, err := builder.generateRPMPath() + + // Verify + require.NoError(t, err) + + assert.Equal(t, expectedPath, generatedPath) +} + +func TestGenerateRPMPathNoRPMDir(t *testing.T) { + // Setup + bc := config.BuildConfig{} + builder := New(nil, &bc) + + // Test + _, err := builder.generateRPMPath() + + // Verify + require.NoError(t, err) +} From 9deb6261554a94d8ee85a8354a663c1885770996 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Mon, 13 Nov 2023 19:11:41 -0500 Subject: [PATCH 05/18] moved some logic --- pkg/build/rpm.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index e0541d25..3be3c6ec 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -22,6 +22,10 @@ func (b *Builder) processRPMs() error { if err != nil { return fmt.Errorf("generating rpm path: %w", err) } + // Only proceed with processing the RPMs if the directory exists + if rpmSourceDir == "" { + return nil + } rpmDestDir := b.combustionDir rpmFileNames, err := getRPMFileNames(rpmSourceDir) @@ -101,7 +105,6 @@ func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { func (b *Builder) generateRPMPath() (string, error) { rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") - // Only proceed with processing the RPMs if the directory exists _, err := os.Stat(rpmSourceDir) if err != nil { if os.IsNotExist(err) { From 6cbd5337dc831e91c6d6097078d92689cb2fecd6 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:00:10 -0500 Subject: [PATCH 06/18] updated code references to "RPM" for consistency --- pkg/build/build.go | 2 +- pkg/build/rpm.go | 63 ++- pkg/build/rpm_test.go | 535 +++++++++---------- pkg/build/scripts/rpms/10_rpm_install.sh.tpl | 2 +- 4 files changed, 300 insertions(+), 302 deletions(-) diff --git a/pkg/build/build.go b/pkg/build/build.go index ccba40b3..d13e4dae 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -46,7 +46,7 @@ func (b *Builder) Build() error { err = b.processRPMs() if err != nil { - return fmt.Errorf("processing rpms: %w", err) + return fmt.Errorf("processing RPMs: %w", err) } switch b.imageConfig.Image.ImageType { diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index 3be3c6ec..5366b75e 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -18,59 +18,59 @@ const ( var modifyRPMScript string func (b *Builder) processRPMs() error { - rpmSourceDir, err := b.generateRPMPath() + RPMSourceDir, err := b.generateRPMPath() if err != nil { - return fmt.Errorf("generating rpm path: %w", err) + return fmt.Errorf("generating RPM path: %w", err) } // Only proceed with processing the RPMs if the directory exists - if rpmSourceDir == "" { + if RPMSourceDir == "" { return nil } - rpmDestDir := b.combustionDir + RPMDestDir := b.combustionDir - rpmFileNames, err := getRPMFileNames(rpmSourceDir) + RPMFileNames, err := getRPMFileNames(RPMSourceDir) if err != nil { - return fmt.Errorf("getting rpm file names: %w", err) + return fmt.Errorf("getting RPM file names: %w", err) } - err = copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) + err = copyRPMs(RPMSourceDir, RPMDestDir, RPMFileNames) if err != nil { return fmt.Errorf("copying RPMs over: %w", err) } - err = b.writeRPMScript(rpmFileNames) + err = b.writeRPMScript(RPMFileNames) if err != nil { - return fmt.Errorf("writing the rpm install script: %w", err) + return fmt.Errorf("writing the RPM install script: %w", err) } return nil } -func getRPMFileNames(rpmSourceDir string) ([]string, error) { - var rpmFileNames []string +func getRPMFileNames(RPMSourceDir string) ([]string, error) { + var RPMFileNames []string - rpms, err := os.ReadDir(rpmSourceDir) + RPMs, err := os.ReadDir(RPMSourceDir) if err != nil { - return nil, fmt.Errorf("reading rpm source dir: %w", err) + return nil, fmt.Errorf("reading RPM source dir: %w", err) } - for _, rpmFile := range rpms { - if filepath.Ext(rpmFile.Name()) == ".rpm" { - rpmFileNames = append(rpmFileNames, rpmFile.Name()) + for _, RPMFile := range RPMs { + if filepath.Ext(RPMFile.Name()) == ".rpm" { + RPMFileNames = append(RPMFileNames, RPMFile.Name()) } } - if len(rpmFileNames) == 0 { - return nil, fmt.Errorf("no rpms found") + if len(RPMFileNames) == 0 { + return nil, fmt.Errorf("no RPMs found") } - return rpmFileNames, nil + return RPMFileNames, nil } -func copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) error { - for _, rpm := range rpmFileNames { - sourcePath := filepath.Join(rpmSourceDir, rpm) - destPath := filepath.Join(rpmDestDir, rpm) +func copyRPMs(RPMSourceDir string, RPMDestDir string, RPMFileNames []string) error { + for _, RPM := range RPMFileNames { + sourcePath := filepath.Join(RPMSourceDir, RPM) + destPath := filepath.Join(RPMDestDir, RPM) err := fileio.CopyFile(sourcePath, destPath) if err != nil { @@ -81,21 +81,20 @@ func copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) err return nil } -func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { - rpmFileNamesString := strings.Join(rpmFileNamesArray, " ") +func (b *Builder) writeRPMScript(RPMFileNames []string) error { values := struct { RPMs string }{ - RPMs: rpmFileNamesString, + RPMs: strings.Join(RPMFileNames, " "), } writtenFilename, err := b.writeCombustionFile(modifyRPMScriptName, modifyRPMScript, &values) if err != nil { - return fmt.Errorf("writing rpm script %s: %w", modifyRPMScriptName, err) + return fmt.Errorf("writing RPM script %s: %w", modifyRPMScriptName, err) } err = os.Chmod(writtenFilename, modifyScriptMode) if err != nil { - return fmt.Errorf("changing permissions on the rpm script %s: %w", modifyRPMScriptName, err) + return fmt.Errorf("changing permissions on the RPM script %s: %w", modifyRPMScriptName, err) } b.registerCombustionScript(modifyRPMScriptName) @@ -104,14 +103,14 @@ func (b *Builder) writeRPMScript(rpmFileNamesArray []string) error { } func (b *Builder) generateRPMPath() (string, error) { - rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") - _, err := os.Stat(rpmSourceDir) + RPMSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") + _, err := os.Stat(RPMSourceDir) if err != nil { if os.IsNotExist(err) { return "", nil } - return "", fmt.Errorf("checking for rpm directory at %s: %w", rpmSourceDir, err) + return "", fmt.Errorf("checking for RPM directory at %s: %w", RPMSourceDir, err) } - return rpmSourceDir, nil + return RPMSourceDir, nil } diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index ea1bc661..b4b6e87f 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -1,268 +1,267 @@ -package build - -import ( - "io/fs" - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestGetRPMFileNames(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - rpmSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer os.Remove(file1Path) - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer os.Remove(file2Path) - - // Test - rpmFileNames, err := getRPMFileNames(rpmSourceDir) - - // Verify - require.NoError(t, err) - - assert.Contains(t, rpmFileNames, "rpm1.rpm") - assert.Contains(t, rpmFileNames, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestCopyRPMs(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - rpmDestDir := builder.combustionDir - rpmSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer os.Remove(file1Path) - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer os.Remove(file2Path) - - rpmFileNames, err := getRPMFileNames(rpmSourceDir) - require.NoError(t, err) - - // Test - err = copyRPMs(rpmSourceDir, rpmDestDir, rpmFileNames) - - // Verify - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm1.rpm")) - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm2.rpm")) - require.NoError(t, err) - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestGetRPMFileNamesNoRPMs(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - rpmSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - // Test - rpmFileNames, err := getRPMFileNames(rpmSourceDir) - - // Verify - require.ErrorContains(t, err, "no rpms found") - - assert.Empty(t, rpmFileNames) -} - -func TestCopyRPMsNoRPMDir(t *testing.T) { - // Setup - context, err := NewContext("../config/ThisDirDoesNotExist", "", true) - require.NoError(t, err) - defer os.Remove(builder.eibBuildDir) - - rpmSourceDir := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") - rpmDestDir := builder.combustionDir - rpmSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - // Test - err = copyRPMs(rpmSourceDir, rpmDestDir, nil) - - // Verify - require.NoError(t, err) -} - -func TestWriteRPMScript(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - buildConfig := config.BuildConfig{ - ImageConfigDir: "../config/testdata", - } - builder := New(nil, &buildConfig) - require.NoError(t, builder.prepareBuildDir()) - - rpmSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer os.Remove(file1Path) - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer os.Remove(file2Path) - - rpmFileNames, err := getRPMFileNames(rpmSourceDir) - require.NoError(t, err) - - // Test - err = builder.writeRPMScript(rpmFileNames) - - // Verify - require.NoError(t, err) - - expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) - foundBytes, err := os.ReadFile(expectedFilename) - require.NoError(t, err) - - stats, err := os.Stat(expectedFilename) - require.NoError(t, err) - assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) - - foundContents := string(foundBytes) - assert.Contains(t, foundContents, "rpm1.rpm") - assert.Contains(t, foundContents, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestProcessRPMs(t *testing.T) { - // Setup - bc := config.BuildConfig{ - ImageConfigDir: "../config/testdata", - } - builder := New(nil, &bc) - err := builder.prepareBuildDir() - require.NoError(t, err) - defer os.Remove(builder.eibBuildDir) - - rpmDestDir := builder.combustionDir - rpmSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer os.Remove(file1Path) - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer os.Remove(file2Path) - - // Test - err = builder.processRPMs() - - // Verify - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(rpmDestDir, "rpm1.rpm")) - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(rpmDestDir, "rpm2.rpm")) - require.NoError(t, err) - - expectedFilename := filepath.Join(rpmDestDir, modifyRPMScriptName) - foundBytes, err := os.ReadFile(expectedFilename) - require.NoError(t, err) - - foundContents := string(foundBytes) - assert.Contains(t, foundContents, "rpm1.rpm") - assert.Contains(t, foundContents, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestGenerateRPMPath(t *testing.T) { - // Setup - bc := config.BuildConfig{ - ImageConfigDir: "../config/testdata", - } - builder := New(nil, &bc) - - expectedPath := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") - - // Test - generatedPath, err := builder.generateRPMPath() - - // Verify - require.NoError(t, err) - - assert.Equal(t, expectedPath, generatedPath) -} - -func TestGenerateRPMPathNoRPMDir(t *testing.T) { - // Setup - bc := config.BuildConfig{} - builder := New(nil, &bc) - - // Test - _, err := builder.generateRPMPath() - - // Verify - require.NoError(t, err) -} +package build + +import ( + "io/fs" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGetRPMFileNames(t *testing.T) { + // Setup + context, err := NewContext("../config/testdata", "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := &Builder{ + context: context, + } + + RPMSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer os.Remove(file1Path) + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer os.Remove(file2Path) + + // Test + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + + // Verify + require.NoError(t, err) + + assert.Contains(t, RPMFileNames, "rpm1.rpm") + assert.Contains(t, RPMFileNames, "rpm2.rpm") + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestCopyRPMs(t *testing.T) { + // Setup + context, err := NewContext("../config/testdata", "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := &Builder{ + context: context, + } + + RPMDestDir := builder.combustionDir + RPMSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer os.Remove(file1Path) + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer os.Remove(file2Path) + + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + require.NoError(t, err) + + // Test + err = copyRPMs(RPMSourceDir, RPMDestDir, RPMFileNames) + + // Verify + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(RPMDestDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(RPMDestDir, "rpm2.rpm")) + require.NoError(t, err) + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestGetRPMFileNamesNoRPMs(t *testing.T) { + // Setup + context, err := NewContext("../config/testdata", "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := &Builder{ + context: context, + } + + RPMSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + // Test + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + + // Verify + require.ErrorContains(t, err, "no rpms found") + + assert.Empty(t, RPMFileNames) +} + +func TestCopyRPMsNoRPMDir(t *testing.T) { + // Setup + context, err := NewContext("../config/ThisDirDoesNotExist", "", true) + require.NoError(t, err) + defer os.Remove(builder.eibBuildDir) + + RPMDestDir := builder.combustionDir + RPMSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + // Test + err = copyRPMs(RPMSourceDir, RPMDestDir, nil) + + // Verify + require.NoError(t, err) +} + +func TestWriteRPMScript(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + buildConfig := config.BuildConfig{ + ImageConfigDir: "../config/testdata", + } + builder := New(nil, &buildConfig) + require.NoError(t, builder.prepareBuildDir()) + + RPMSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer os.Remove(file1Path) + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer os.Remove(file2Path) + + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + require.NoError(t, err) + + // Test + err = builder.writeRPMScript(RPMFileNames) + + // Verify + require.NoError(t, err) + + expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + stats, err := os.Stat(expectedFilename) + require.NoError(t, err) + assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestProcessRPMs(t *testing.T) { + // Setup + bc := config.BuildConfig{ + ImageConfigDir: "../config/testdata", + } + builder := New(nil, &bc) + err := builder.prepareBuildDir() + require.NoError(t, err) + defer os.Remove(builder.eibBuildDir) + + RPMDestDir := builder.combustionDir + RPMSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer os.Remove(file1Path) + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer os.Remove(file2Path) + + // Test + err = builder.processRPMs() + + // Verify + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(RPMDestDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(RPMDestDir, "rpm2.rpm")) + require.NoError(t, err) + + expectedFilename := filepath.Join(RPMDestDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") + + // Cleanup + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) +} + +func TestGenerateRPMPath(t *testing.T) { + // Setup + bc := config.BuildConfig{ + ImageConfigDir: "../config/testdata", + } + builder := New(nil, &bc) + + expectedPath := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") + + // Test + generatedPath, err := builder.generateRPMPath() + + // Verify + require.NoError(t, err) + + assert.Equal(t, expectedPath, generatedPath) +} + +func TestGenerateRPMPathNoRPMDir(t *testing.T) { + // Setup + bc := config.BuildConfig{} + builder := New(nil, &bc) + + // Test + _, err := builder.generateRPMPath() + + // Verify + require.NoError(t, err) +} diff --git a/pkg/build/scripts/rpms/10_rpm_install.sh.tpl b/pkg/build/scripts/rpms/10_rpm_install.sh.tpl index 01249187..b92445d7 100644 --- a/pkg/build/scripts/rpms/10_rpm_install.sh.tpl +++ b/pkg/build/scripts/rpms/10_rpm_install.sh.tpl @@ -2,6 +2,6 @@ set -euo pipefail # Template Fields -# RPMs - A string that contains all of the rpms present in the user created config directory, separated by spaces. +# RPMs - A string that contains all of the RPMs present in the user created config directory, separated by spaces. rpm -ivh --nosignature {{.RPMs}} \ No newline at end of file From fd3235483e26294644b9772df0f1842c1472fec7 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:03:20 -0500 Subject: [PATCH 07/18] update to error message based on feedback --- pkg/build/rpm.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index 5366b75e..a0e4280c 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -40,7 +40,7 @@ func (b *Builder) processRPMs() error { err = b.writeRPMScript(RPMFileNames) if err != nil { - return fmt.Errorf("writing the RPM install script: %w", err) + return fmt.Errorf("writing the RPM install script %s: %w", modifyRPMScriptName, err) } return nil @@ -94,7 +94,7 @@ func (b *Builder) writeRPMScript(RPMFileNames []string) error { } err = os.Chmod(writtenFilename, modifyScriptMode) if err != nil { - return fmt.Errorf("changing permissions on the RPM script %s: %w", modifyRPMScriptName, err) + return fmt.Errorf("adjusting permissions: %w", err) } b.registerCombustionScript(modifyRPMScriptName) From 09e6094c46b428fc49edfe3a204af3201d4b97bd Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:50:59 -0500 Subject: [PATCH 08/18] updated rpm tests --- pkg/build/rpm_test.go | 532 +++++++++++++++++++++--------------------- 1 file changed, 265 insertions(+), 267 deletions(-) diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index b4b6e87f..f73bd2ec 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -1,267 +1,265 @@ -package build - -import ( - "io/fs" - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestGetRPMFileNames(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - RPMSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer os.Remove(file1Path) - - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer os.Remove(file2Path) - - // Test - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - - // Verify - require.NoError(t, err) - - assert.Contains(t, RPMFileNames, "rpm1.rpm") - assert.Contains(t, RPMFileNames, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestCopyRPMs(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - RPMDestDir := builder.combustionDir - RPMSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer os.Remove(file1Path) - - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer os.Remove(file2Path) - - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - require.NoError(t, err) - - // Test - err = copyRPMs(RPMSourceDir, RPMDestDir, RPMFileNames) - - // Verify - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(RPMDestDir, "rpm1.rpm")) - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(RPMDestDir, "rpm2.rpm")) - require.NoError(t, err) - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestGetRPMFileNamesNoRPMs(t *testing.T) { - // Setup - context, err := NewContext("../config/testdata", "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := &Builder{ - context: context, - } - - RPMSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - // Test - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - - // Verify - require.ErrorContains(t, err, "no rpms found") - - assert.Empty(t, RPMFileNames) -} - -func TestCopyRPMsNoRPMDir(t *testing.T) { - // Setup - context, err := NewContext("../config/ThisDirDoesNotExist", "", true) - require.NoError(t, err) - defer os.Remove(builder.eibBuildDir) - - RPMDestDir := builder.combustionDir - RPMSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - // Test - err = copyRPMs(RPMSourceDir, RPMDestDir, nil) - - // Verify - require.NoError(t, err) -} - -func TestWriteRPMScript(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - buildConfig := config.BuildConfig{ - ImageConfigDir: "../config/testdata", - } - builder := New(nil, &buildConfig) - require.NoError(t, builder.prepareBuildDir()) - - RPMSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer os.Remove(file1Path) - - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer os.Remove(file2Path) - - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - require.NoError(t, err) - - // Test - err = builder.writeRPMScript(RPMFileNames) - - // Verify - require.NoError(t, err) - - expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) - foundBytes, err := os.ReadFile(expectedFilename) - require.NoError(t, err) - - stats, err := os.Stat(expectedFilename) - require.NoError(t, err) - assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) - - foundContents := string(foundBytes) - assert.Contains(t, foundContents, "rpm1.rpm") - assert.Contains(t, foundContents, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestProcessRPMs(t *testing.T) { - // Setup - bc := config.BuildConfig{ - ImageConfigDir: "../config/testdata", - } - builder := New(nil, &bc) - err := builder.prepareBuildDir() - require.NoError(t, err) - defer os.Remove(builder.eibBuildDir) - - RPMDestDir := builder.combustionDir - RPMSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer os.Remove(file1Path) - - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer os.Remove(file2Path) - - // Test - err = builder.processRPMs() - - // Verify - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(RPMDestDir, "rpm1.rpm")) - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(RPMDestDir, "rpm2.rpm")) - require.NoError(t, err) - - expectedFilename := filepath.Join(RPMDestDir, modifyRPMScriptName) - foundBytes, err := os.ReadFile(expectedFilename) - require.NoError(t, err) - - foundContents := string(foundBytes) - assert.Contains(t, foundContents, "rpm1.rpm") - assert.Contains(t, foundContents, "rpm2.rpm") - - // Cleanup - assert.NoError(t, file1.Close()) - assert.NoError(t, file2.Close()) -} - -func TestGenerateRPMPath(t *testing.T) { - // Setup - bc := config.BuildConfig{ - ImageConfigDir: "../config/testdata", - } - builder := New(nil, &bc) - - expectedPath := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") - - // Test - generatedPath, err := builder.generateRPMPath() - - // Verify - require.NoError(t, err) - - assert.Equal(t, expectedPath, generatedPath) -} - -func TestGenerateRPMPathNoRPMDir(t *testing.T) { - // Setup - bc := config.BuildConfig{} - builder := New(nil, &bc) - - // Test - _, err := builder.generateRPMPath() - - // Verify - require.NoError(t, err) -} +package build + +import ( + "io/fs" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGetRPMFileNames(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-get-RPM-file-names-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{} + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() + + // Test + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + + // Verify + require.NoError(t, err) + + assert.Contains(t, RPMFileNames, "rpm1.rpm") + assert.Contains(t, RPMFileNames, "rpm2.rpm") +} + +func TestCopyRPMs(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{} + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() + + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + require.NoError(t, err) + + // Test + err = copyRPMs(RPMSourceDir, builder.combustionDir, RPMFileNames) + + // Verify + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm2.rpm")) + require.NoError(t, err) +} + +func TestGetRPMFileNamesNoRPMs(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-no-RPMs") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{} + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + // Test + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + + // Verify + require.ErrorContains(t, err, "no RPMs found") + + assert.Empty(t, RPMFileNames) +} + +func TestCopyRPMsNoRPMDir(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-no-dir-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + bc := config.BuildConfig{} + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + RPMDestDir := builder.combustionDir + RPMSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + // Test + err = copyRPMs(RPMSourceDir, RPMDestDir, nil) + + // Verify + require.NoError(t, err) +} + +func TestWriteRPMScript(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-write-RPM-script-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + buildConfig := config.BuildConfig{} + builder := New(nil, &buildConfig) + require.NoError(t, builder.prepareBuildDir()) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() + + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + require.NoError(t, err) + + // Test + err = builder.writeRPMScript(RPMFileNames) + + // Verify + require.NoError(t, err) + + expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + stats, err := os.Stat(expectedFilename) + require.NoError(t, err) + assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") +} + +func TestProcessRPMs(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-process-RPMs-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{ + ImageConfigDir: tmpDir, + } + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() + + // Test + err = builder.processRPMs() + + // Verify + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm2.rpm")) + require.NoError(t, err) + + expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") +} + +func TestGenerateRPMPath(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-generate-RPM-path-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{ + ImageConfigDir: tmpDir, + } + builder := New(nil, &bc) + + expectedPath := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") + + // Test + generatedPath, err := builder.generateRPMPath() + + // Verify + require.NoError(t, err) + + assert.Equal(t, expectedPath, generatedPath) +} + +func TestGenerateRPMPathNoRPMDir(t *testing.T) { + // Setup + bc := config.BuildConfig{} + builder := New(nil, &bc) + + // Test + _, err := builder.generateRPMPath() + + // Verify + require.NoError(t, err) +} From c429481c8c06f93f28f1c83582ae3e91d49137dc Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:53:14 -0500 Subject: [PATCH 09/18] removed references to "RPMDestDir" and just put the relevant dir instead --- pkg/build/rpm.go | 3 +- pkg/build/rpm_test.go | 529 +++++++++++++++++++++--------------------- 2 files changed, 265 insertions(+), 267 deletions(-) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index a0e4280c..8444afcb 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -26,14 +26,13 @@ func (b *Builder) processRPMs() error { if RPMSourceDir == "" { return nil } - RPMDestDir := b.combustionDir RPMFileNames, err := getRPMFileNames(RPMSourceDir) if err != nil { return fmt.Errorf("getting RPM file names: %w", err) } - err = copyRPMs(RPMSourceDir, RPMDestDir, RPMFileNames) + err = copyRPMs(RPMSourceDir, b.combustionDir, RPMFileNames) if err != nil { return fmt.Errorf("copying RPMs over: %w", err) } diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index f73bd2ec..4d7d97ef 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -1,265 +1,264 @@ -package build - -import ( - "io/fs" - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestGetRPMFileNames(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-get-RPM-file-names-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) - require.NoError(t, err) - - bc := config.BuildConfig{} - builder := New(nil, &bc) - err = builder.prepareBuildDir() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() - - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() - - // Test - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - - // Verify - require.NoError(t, err) - - assert.Contains(t, RPMFileNames, "rpm1.rpm") - assert.Contains(t, RPMFileNames, "rpm2.rpm") -} - -func TestCopyRPMs(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) - require.NoError(t, err) - - bc := config.BuildConfig{} - builder := New(nil, &bc) - err = builder.prepareBuildDir() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() - - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() - - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - require.NoError(t, err) - - // Test - err = copyRPMs(RPMSourceDir, builder.combustionDir, RPMFileNames) - - // Verify - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm1.rpm")) - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm2.rpm")) - require.NoError(t, err) -} - -func TestGetRPMFileNamesNoRPMs(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-no-RPMs") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) - require.NoError(t, err) - - bc := config.BuildConfig{} - builder := New(nil, &bc) - err = builder.prepareBuildDir() - require.NoError(t, err) - - // Test - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - - // Verify - require.ErrorContains(t, err, "no RPMs found") - - assert.Empty(t, RPMFileNames) -} - -func TestCopyRPMsNoRPMDir(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-no-dir-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - bc := config.BuildConfig{} - builder := New(nil, &bc) - err = builder.prepareBuildDir() - require.NoError(t, err) - - RPMDestDir := builder.combustionDir - RPMSourceDir, err := builder.generateRPMPath() - require.NoError(t, err) - - // Test - err = copyRPMs(RPMSourceDir, RPMDestDir, nil) - - // Verify - require.NoError(t, err) -} - -func TestWriteRPMScript(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-write-RPM-script-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) - require.NoError(t, err) - - buildConfig := config.BuildConfig{} - builder := New(nil, &buildConfig) - require.NoError(t, builder.prepareBuildDir()) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() - - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() - - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - require.NoError(t, err) - - // Test - err = builder.writeRPMScript(RPMFileNames) - - // Verify - require.NoError(t, err) - - expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) - foundBytes, err := os.ReadFile(expectedFilename) - require.NoError(t, err) - - stats, err := os.Stat(expectedFilename) - require.NoError(t, err) - assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) - - foundContents := string(foundBytes) - assert.Contains(t, foundContents, "rpm1.rpm") - assert.Contains(t, foundContents, "rpm2.rpm") -} - -func TestProcessRPMs(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-process-RPMs-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) - require.NoError(t, err) - - bc := config.BuildConfig{ - ImageConfigDir: tmpDir, - } - builder := New(nil, &bc) - err = builder.prepareBuildDir() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() - - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() - - // Test - err = builder.processRPMs() - - // Verify - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm1.rpm")) - require.NoError(t, err) - - _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm2.rpm")) - require.NoError(t, err) - - expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) - foundBytes, err := os.ReadFile(expectedFilename) - require.NoError(t, err) - - foundContents := string(foundBytes) - assert.Contains(t, foundContents, "rpm1.rpm") - assert.Contains(t, foundContents, "rpm2.rpm") -} - -func TestGenerateRPMPath(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-generate-RPM-path-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) - require.NoError(t, err) - - bc := config.BuildConfig{ - ImageConfigDir: tmpDir, - } - builder := New(nil, &bc) - - expectedPath := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") - - // Test - generatedPath, err := builder.generateRPMPath() - - // Verify - require.NoError(t, err) - - assert.Equal(t, expectedPath, generatedPath) -} - -func TestGenerateRPMPathNoRPMDir(t *testing.T) { - // Setup - bc := config.BuildConfig{} - builder := New(nil, &bc) - - // Test - _, err := builder.generateRPMPath() - - // Verify - require.NoError(t, err) -} +package build + +import ( + "io/fs" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGetRPMFileNames(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-get-RPM-file-names-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{} + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() + + // Test + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + + // Verify + require.NoError(t, err) + + assert.Contains(t, RPMFileNames, "rpm1.rpm") + assert.Contains(t, RPMFileNames, "rpm2.rpm") +} + +func TestCopyRPMs(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{} + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() + + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + require.NoError(t, err) + + // Test + err = copyRPMs(RPMSourceDir, builder.combustionDir, RPMFileNames) + + // Verify + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm2.rpm")) + require.NoError(t, err) +} + +func TestGetRPMFileNamesNoRPMs(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-no-RPMs") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{} + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + // Test + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + + // Verify + require.ErrorContains(t, err, "no RPMs found") + + assert.Empty(t, RPMFileNames) +} + +func TestCopyRPMsNoRPMDir(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-no-dir-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + bc := config.BuildConfig{} + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + RPMSourceDir, err := builder.generateRPMPath() + require.NoError(t, err) + + // Test + err = copyRPMs(RPMSourceDir, builder.combustionDir, nil) + + // Verify + require.NoError(t, err) +} + +func TestWriteRPMScript(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-write-RPM-script-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + buildConfig := config.BuildConfig{} + builder := New(nil, &buildConfig) + require.NoError(t, builder.prepareBuildDir()) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() + + RPMFileNames, err := getRPMFileNames(RPMSourceDir) + require.NoError(t, err) + + // Test + err = builder.writeRPMScript(RPMFileNames) + + // Verify + require.NoError(t, err) + + expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + stats, err := os.Stat(expectedFilename) + require.NoError(t, err) + assert.Equal(t, fs.FileMode(modifyScriptMode), stats.Mode()) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") +} + +func TestProcessRPMs(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-process-RPMs-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{ + ImageConfigDir: tmpDir, + } + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + + file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) + require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() + + // Test + err = builder.processRPMs() + + // Verify + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm1.rpm")) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm2.rpm")) + require.NoError(t, err) + + expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + foundBytes, err := os.ReadFile(expectedFilename) + require.NoError(t, err) + + foundContents := string(foundBytes) + assert.Contains(t, foundContents, "rpm1.rpm") + assert.Contains(t, foundContents, "rpm2.rpm") +} + +func TestGenerateRPMPath(t *testing.T) { + // Setup + tmpDir, err := os.MkdirTemp("", "eib-generate-RPM-path-test-") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + + RPMSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(RPMSourceDir, 0755) + require.NoError(t, err) + + bc := config.BuildConfig{ + ImageConfigDir: tmpDir, + } + builder := New(nil, &bc) + + expectedPath := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") + + // Test + generatedPath, err := builder.generateRPMPath() + + // Verify + require.NoError(t, err) + + assert.Equal(t, expectedPath, generatedPath) +} + +func TestGenerateRPMPathNoRPMDir(t *testing.T) { + // Setup + bc := config.BuildConfig{} + builder := New(nil, &bc) + + // Test + _, err := builder.generateRPMPath() + + // Verify + require.NoError(t, err) +} From ee4e56bb9f4dededa32d12fa9e9f2f73677947c9 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Tue, 14 Nov 2023 14:14:20 -0500 Subject: [PATCH 10/18] update for linter --- pkg/build/rpm_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index 4d7d97ef..9af8cfad 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -17,7 +17,7 @@ func TestGetRPMFileNames(t *testing.T) { defer os.RemoveAll(tmpDir) RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) + err = os.Mkdir(RPMSourceDir, 0o755) require.NoError(t, err) bc := config.BuildConfig{} @@ -52,7 +52,7 @@ func TestCopyRPMs(t *testing.T) { defer os.RemoveAll(tmpDir) RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) + err = os.Mkdir(RPMSourceDir, 0o755) require.NoError(t, err) bc := config.BuildConfig{} @@ -93,7 +93,7 @@ func TestGetRPMFileNamesNoRPMs(t *testing.T) { defer os.RemoveAll(tmpDir) RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) + err = os.Mkdir(RPMSourceDir, 0o755) require.NoError(t, err) bc := config.BuildConfig{} @@ -138,7 +138,7 @@ func TestWriteRPMScript(t *testing.T) { defer os.RemoveAll(tmpDir) RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) + err = os.Mkdir(RPMSourceDir, 0o755) require.NoError(t, err) buildConfig := config.BuildConfig{} @@ -184,7 +184,7 @@ func TestProcessRPMs(t *testing.T) { defer os.RemoveAll(tmpDir) RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) + err = os.Mkdir(RPMSourceDir, 0o755) require.NoError(t, err) bc := config.BuildConfig{ @@ -232,7 +232,7 @@ func TestGenerateRPMPath(t *testing.T) { defer os.RemoveAll(tmpDir) RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0755) + err = os.Mkdir(RPMSourceDir, 0o755) require.NoError(t, err) bc := config.BuildConfig{ From eb158853c8fa24999f24831cbe7c4c4bd180ce56 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Tue, 14 Nov 2023 16:38:15 -0500 Subject: [PATCH 11/18] update to rpm template name and change for linter --- pkg/build/rpm.go | 5 +++-- .../rpms/{10_rpm_install.sh.tpl => 10-rpm-install.sh.tpl} | 0 2 files changed, 3 insertions(+), 2 deletions(-) rename pkg/build/scripts/rpms/{10_rpm_install.sh.tpl => 10-rpm-install.sh.tpl} (100%) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index 8444afcb..ec320aaf 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -6,15 +6,16 @@ import ( "os" "path/filepath" - "github.com/suse-edge/edge-image-builder/pkg/fileio" "strings" + + "github.com/suse-edge/edge-image-builder/pkg/fileio" ) const ( modifyRPMScriptName = "10_rpm_install.sh" ) -//go:embed scripts/rpms/10_rpm_install.sh.tpl +//go:embed scripts/rpms/10-rpm-install.sh.tpl var modifyRPMScript string func (b *Builder) processRPMs() error { diff --git a/pkg/build/scripts/rpms/10_rpm_install.sh.tpl b/pkg/build/scripts/rpms/10-rpm-install.sh.tpl similarity index 100% rename from pkg/build/scripts/rpms/10_rpm_install.sh.tpl rename to pkg/build/scripts/rpms/10-rpm-install.sh.tpl From 4e9e3a7af570835318de0610520796c15d4ef2ac Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Wed, 15 Nov 2023 23:57:24 -0500 Subject: [PATCH 12/18] updates based on feedback --- pkg/build/rpm.go | 51 ++++++------ pkg/build/rpm_test.go | 130 +++++++++++++++--------------- pkg/config/testdata/rpms/.gitkeep | 0 3 files changed, 92 insertions(+), 89 deletions(-) delete mode 100644 pkg/config/testdata/rpms/.gitkeep diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index ec320aaf..3d053056 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -19,26 +19,26 @@ const ( var modifyRPMScript string func (b *Builder) processRPMs() error { - RPMSourceDir, err := b.generateRPMPath() + rpmSourceDir, err := b.generateRPMPath() if err != nil { return fmt.Errorf("generating RPM path: %w", err) } // Only proceed with processing the RPMs if the directory exists - if RPMSourceDir == "" { + if rpmSourceDir == "" { return nil } - RPMFileNames, err := getRPMFileNames(RPMSourceDir) + rpmFileNames, err := getRPMFileNames(rpmSourceDir) if err != nil { return fmt.Errorf("getting RPM file names: %w", err) } - err = copyRPMs(RPMSourceDir, b.combustionDir, RPMFileNames) + err = copyRPMs(rpmSourceDir, b.combustionDir, rpmFileNames) if err != nil { return fmt.Errorf("copying RPMs over: %w", err) } - err = b.writeRPMScript(RPMFileNames) + err = b.writeRPMScript(rpmFileNames) if err != nil { return fmt.Errorf("writing the RPM install script %s: %w", modifyRPMScriptName, err) } @@ -46,31 +46,34 @@ func (b *Builder) processRPMs() error { return nil } -func getRPMFileNames(RPMSourceDir string) ([]string, error) { - var RPMFileNames []string +func getRPMFileNames(rpmSourceDir string) ([]string, error) { + var rpmFileNames []string - RPMs, err := os.ReadDir(RPMSourceDir) + rpms, err := os.ReadDir(rpmSourceDir) if err != nil { return nil, fmt.Errorf("reading RPM source dir: %w", err) } - for _, RPMFile := range RPMs { - if filepath.Ext(RPMFile.Name()) == ".rpm" { - RPMFileNames = append(RPMFileNames, RPMFile.Name()) + for _, rpmFile := range rpms { + if filepath.Ext(rpmFile.Name()) == ".rpm" { + rpmFileNames = append(rpmFileNames, rpmFile.Name()) } } - if len(RPMFileNames) == 0 { + if len(rpmFileNames) == 0 { return nil, fmt.Errorf("no RPMs found") } - return RPMFileNames, nil + return rpmFileNames, nil } -func copyRPMs(RPMSourceDir string, RPMDestDir string, RPMFileNames []string) error { - for _, RPM := range RPMFileNames { - sourcePath := filepath.Join(RPMSourceDir, RPM) - destPath := filepath.Join(RPMDestDir, RPM) +func copyRPMs(rpmSourceDir string, rpmDestDir string, rpmFileNames []string) error { + if rpmDestDir == "" { + return fmt.Errorf("RPM destination directory cannot be empty") + } + for _, rpm := range rpmFileNames { + sourcePath := filepath.Join(rpmSourceDir, rpm) + destPath := filepath.Join(rpmDestDir, rpm) err := fileio.CopyFile(sourcePath, destPath) if err != nil { @@ -81,16 +84,16 @@ func copyRPMs(RPMSourceDir string, RPMDestDir string, RPMFileNames []string) err return nil } -func (b *Builder) writeRPMScript(RPMFileNames []string) error { +func (b *Builder) writeRPMScript(rpmFileNames []string) error { values := struct { RPMs string }{ - RPMs: strings.Join(RPMFileNames, " "), + RPMs: strings.Join(rpmFileNames, " "), } writtenFilename, err := b.writeCombustionFile(modifyRPMScriptName, modifyRPMScript, &values) if err != nil { - return fmt.Errorf("writing RPM script %s: %w", modifyRPMScriptName, err) + return fmt.Errorf("writing RPM script: %w", err) } err = os.Chmod(writtenFilename, modifyScriptMode) if err != nil { @@ -103,14 +106,14 @@ func (b *Builder) writeRPMScript(RPMFileNames []string) error { } func (b *Builder) generateRPMPath() (string, error) { - RPMSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") - _, err := os.Stat(RPMSourceDir) + rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") + _, err := os.Stat(rpmSourceDir) if err != nil { if os.IsNotExist(err) { return "", nil } - return "", fmt.Errorf("checking for RPM directory at %s: %w", RPMSourceDir, err) + return "", fmt.Errorf("checking for RPM directory at %s: %w", rpmSourceDir, err) } - return RPMSourceDir, nil + return rpmSourceDir, nil } diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index 9af8cfad..49a2a23b 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -16,33 +16,28 @@ func TestGetRPMFileNames(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(tmpDir) - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0o755) + rpmSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) - bc := config.BuildConfig{} - builder := New(nil, &bc) - err = builder.prepareBuildDir() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") file1, err := os.Create(file1Path) require.NoError(t, err) defer file1.Close() - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") file2, err := os.Create(file2Path) require.NoError(t, err) defer file2.Close() // Test - RPMFileNames, err := getRPMFileNames(RPMSourceDir) + rpmFileNames, err := getRPMFileNames(rpmSourceDir) // Verify require.NoError(t, err) - assert.Contains(t, RPMFileNames, "rpm1.rpm") - assert.Contains(t, RPMFileNames, "rpm2.rpm") + assert.Contains(t, rpmFileNames, "rpm1.rpm") + assert.Contains(t, rpmFileNames, "rpm2.rpm") } func TestCopyRPMs(t *testing.T) { @@ -51,38 +46,34 @@ func TestCopyRPMs(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(tmpDir) - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0o755) + rpmSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) - bc := config.BuildConfig{} - builder := New(nil, &bc) - err = builder.prepareBuildDir() + tmpDestDir := filepath.Join(tmpDir, "dest-dir") + err = os.Mkdir(tmpDestDir, 0o755) require.NoError(t, err) - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") file1, err := os.Create(file1Path) require.NoError(t, err) defer file1.Close() - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") file2, err := os.Create(file2Path) require.NoError(t, err) defer file2.Close() - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - require.NoError(t, err) - // Test - err = copyRPMs(RPMSourceDir, builder.combustionDir, RPMFileNames) + err = copyRPMs(rpmSourceDir, tmpDestDir, []string{"rpm1.rpm", "rpm2.rpm"}) // Verify require.NoError(t, err) - _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm1.rpm")) + _, err = os.Stat(filepath.Join(tmpDestDir, "rpm1.rpm")) require.NoError(t, err) - _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm2.rpm")) + _, err = os.Stat(filepath.Join(tmpDestDir, "rpm2.rpm")) require.NoError(t, err) } @@ -92,43 +83,57 @@ func TestGetRPMFileNamesNoRPMs(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(tmpDir) - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0o755) - require.NoError(t, err) - - bc := config.BuildConfig{} - builder := New(nil, &bc) - err = builder.prepareBuildDir() + rpmSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) // Test - RPMFileNames, err := getRPMFileNames(RPMSourceDir) + rpmFileNames, err := getRPMFileNames(rpmSourceDir) // Verify require.ErrorContains(t, err, "no RPMs found") - assert.Empty(t, RPMFileNames) + assert.Empty(t, rpmFileNames) } -func TestCopyRPMsNoRPMDir(t *testing.T) { +func TestCopyRPMsNoRPMDestDir(t *testing.T) { // Setup - tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-no-dir-") + tmpSrcDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-") require.NoError(t, err) - defer os.RemoveAll(tmpDir) + defer os.RemoveAll(tmpSrcDir) - bc := config.BuildConfig{} - builder := New(nil, &bc) - err = builder.prepareBuildDir() + rpmSourceDir := filepath.Join(tmpSrcDir, "rpms") + err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) - RPMSourceDir, err := builder.generateRPMPath() + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") + file1, err := os.Create(file1Path) require.NoError(t, err) + defer file1.Close() + + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") + file2, err := os.Create(file2Path) + require.NoError(t, err) + defer file2.Close() // Test - err = copyRPMs(RPMSourceDir, builder.combustionDir, nil) + err = copyRPMs(rpmSourceDir, "", []string{"rpm1.rpm", "rpm2.rpm"}) // Verify + require.ErrorContains(t, err, "RPM destination directory cannot be empty") +} + +func TestCopyRPMsNoRPMSrcDir(t *testing.T) { + // Setup + tmpDestDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-") require.NoError(t, err) + defer os.RemoveAll(tmpDestDir) + + // Test + err = copyRPMs("", tmpDestDir, []string{"rpm1.rpm", "rpm2.rpm"}) + + // Verify + require.ErrorContains(t, err, "opening source file") } func TestWriteRPMScript(t *testing.T) { @@ -137,29 +142,26 @@ func TestWriteRPMScript(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(tmpDir) - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0o755) + rpmSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) buildConfig := config.BuildConfig{} builder := New(nil, &buildConfig) require.NoError(t, builder.prepareBuildDir()) - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") file1, err := os.Create(file1Path) require.NoError(t, err) defer file1.Close() - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") file2, err := os.Create(file2Path) require.NoError(t, err) defer file2.Close() - RPMFileNames, err := getRPMFileNames(RPMSourceDir) - require.NoError(t, err) - // Test - err = builder.writeRPMScript(RPMFileNames) + err = builder.writeRPMScript([]string{"rpm1.rpm", "rpm2.rpm"}) // Verify require.NoError(t, err) @@ -183,27 +185,27 @@ func TestProcessRPMs(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(tmpDir) - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0o755) + rpmSourceDir := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) - bc := config.BuildConfig{ - ImageConfigDir: tmpDir, - } - builder := New(nil, &bc) - err = builder.prepareBuildDir() - require.NoError(t, err) - - file1Path := filepath.Join(RPMSourceDir, "rpm1.rpm") + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") file1, err := os.Create(file1Path) require.NoError(t, err) defer file1.Close() - file2Path := filepath.Join(RPMSourceDir, "rpm2.rpm") + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") file2, err := os.Create(file2Path) require.NoError(t, err) defer file2.Close() + bc := config.BuildConfig{ + ImageConfigDir: tmpDir, + } + builder := New(nil, &bc) + err = builder.prepareBuildDir() + require.NoError(t, err) + // Test err = builder.processRPMs() @@ -231,8 +233,8 @@ func TestGenerateRPMPath(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(tmpDir) - RPMSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(RPMSourceDir, 0o755) + expectedPath := filepath.Join(tmpDir, "rpms") + err = os.Mkdir(expectedPath, 0o755) require.NoError(t, err) bc := config.BuildConfig{ @@ -240,8 +242,6 @@ func TestGenerateRPMPath(t *testing.T) { } builder := New(nil, &bc) - expectedPath := filepath.Join(builder.buildConfig.ImageConfigDir, "rpms") - // Test generatedPath, err := builder.generateRPMPath() diff --git a/pkg/config/testdata/rpms/.gitkeep b/pkg/config/testdata/rpms/.gitkeep deleted file mode 100644 index e69de29b..00000000 From 95e2a8da12246182edde5ddd78c5bb16abdfc58b Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Thu, 16 Nov 2023 01:02:42 -0500 Subject: [PATCH 13/18] update to use context --- pkg/build/rpm.go | 4 +-- pkg/build/rpm_test.go | 65 +++++++++++++++++++++++++++---------------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index 3d053056..8e9f38e9 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -33,7 +33,7 @@ func (b *Builder) processRPMs() error { return fmt.Errorf("getting RPM file names: %w", err) } - err = copyRPMs(rpmSourceDir, b.combustionDir, rpmFileNames) + err = copyRPMs(rpmSourceDir, b.context.CombustionDir, rpmFileNames) if err != nil { return fmt.Errorf("copying RPMs over: %w", err) } @@ -106,7 +106,7 @@ func (b *Builder) writeRPMScript(rpmFileNames []string) error { } func (b *Builder) generateRPMPath() (string, error) { - rpmSourceDir := filepath.Join(b.buildConfig.ImageConfigDir, "rpms") + rpmSourceDir := filepath.Join(b.context.ImageConfigDir, "rpms") _, err := os.Stat(rpmSourceDir) if err != nil { if os.IsNotExist(err) { diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index 49a2a23b..c7fd92f2 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -50,9 +50,13 @@ func TestCopyRPMs(t *testing.T) { err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) - tmpDestDir := filepath.Join(tmpDir, "dest-dir") - err = os.Mkdir(tmpDestDir, 0o755) + context, err := NewContext("", "", true) require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := Builder{context: context} file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") file1, err := os.Create(file1Path) @@ -65,15 +69,15 @@ func TestCopyRPMs(t *testing.T) { defer file2.Close() // Test - err = copyRPMs(rpmSourceDir, tmpDestDir, []string{"rpm1.rpm", "rpm2.rpm"}) + err = copyRPMs(rpmSourceDir, builder.context.CombustionDir, []string{"rpm1.rpm", "rpm2.rpm"}) // Verify require.NoError(t, err) - _, err = os.Stat(filepath.Join(tmpDestDir, "rpm1.rpm")) + _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm1.rpm")) require.NoError(t, err) - _, err = os.Stat(filepath.Join(tmpDestDir, "rpm2.rpm")) + _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm2.rpm")) require.NoError(t, err) } @@ -146,9 +150,13 @@ func TestWriteRPMScript(t *testing.T) { err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) - buildConfig := config.BuildConfig{} - builder := New(nil, &buildConfig) - require.NoError(t, builder.prepareBuildDir()) + context, err := NewContext("", "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := Builder{context: context} file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") file1, err := os.Create(file1Path) @@ -166,7 +174,7 @@ func TestWriteRPMScript(t *testing.T) { // Verify require.NoError(t, err) - expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + expectedFilename := filepath.Join(builder.context.CombustionDir, modifyRPMScriptName) foundBytes, err := os.ReadFile(expectedFilename) require.NoError(t, err) @@ -199,12 +207,13 @@ func TestProcessRPMs(t *testing.T) { require.NoError(t, err) defer file2.Close() - bc := config.BuildConfig{ - ImageConfigDir: tmpDir, - } - builder := New(nil, &bc) - err = builder.prepareBuildDir() + context, err := NewContext(tmpDir, "", true) require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := Builder{context: context} // Test err = builder.processRPMs() @@ -212,13 +221,13 @@ func TestProcessRPMs(t *testing.T) { // Verify require.NoError(t, err) - _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm1.rpm")) + _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm1.rpm")) require.NoError(t, err) - _, err = os.Stat(filepath.Join(builder.combustionDir, "rpm2.rpm")) + _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm2.rpm")) require.NoError(t, err) - expectedFilename := filepath.Join(builder.combustionDir, modifyRPMScriptName) + expectedFilename := filepath.Join(builder.context.CombustionDir, modifyRPMScriptName) foundBytes, err := os.ReadFile(expectedFilename) require.NoError(t, err) @@ -237,10 +246,13 @@ func TestGenerateRPMPath(t *testing.T) { err = os.Mkdir(expectedPath, 0o755) require.NoError(t, err) - bc := config.BuildConfig{ - ImageConfigDir: tmpDir, - } - builder := New(nil, &bc) + context, err := NewContext(tmpDir, "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := Builder{context: context} // Test generatedPath, err := builder.generateRPMPath() @@ -253,11 +265,16 @@ func TestGenerateRPMPath(t *testing.T) { func TestGenerateRPMPathNoRPMDir(t *testing.T) { // Setup - bc := config.BuildConfig{} - builder := New(nil, &bc) + context, err := NewContext("", "", true) + require.NoError(t, err) + defer func() { + assert.NoError(t, CleanUpBuildDir(context)) + }() + + builder := Builder{context: context} // Test - _, err := builder.generateRPMPath() + _, err = builder.generateRPMPath() // Verify require.NoError(t, err) From 3a1c04894fe4c69e1b8d8fdc1fb743f44a060b50 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Thu, 16 Nov 2023 03:50:31 -0500 Subject: [PATCH 14/18] oversight --- pkg/build/rpm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/build/rpm.go b/pkg/build/rpm.go index 8e9f38e9..de6b5bd2 100644 --- a/pkg/build/rpm.go +++ b/pkg/build/rpm.go @@ -12,7 +12,7 @@ import ( ) const ( - modifyRPMScriptName = "10_rpm_install.sh" + modifyRPMScriptName = "10-rpm-install.sh" ) //go:embed scripts/rpms/10-rpm-install.sh.tpl From fe2b9606dd044da2bbb9300051c5bd4248ab6d4f Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Thu, 16 Nov 2023 09:32:03 -0500 Subject: [PATCH 15/18] refactoring rpm tests --- pkg/build/rpm_test.go | 148 ++++++++++++++---------------------------- 1 file changed, 47 insertions(+), 101 deletions(-) diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index c7fd92f2..307fd900 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -10,25 +10,39 @@ import ( "github.com/stretchr/testify/require" ) -func TestGetRPMFileNames(t *testing.T) { - // Setup - tmpDir, err := os.MkdirTemp("", "eib-get-RPM-file-names-test-") +func setupRPMSourceDir(t *testing.T, addFiles bool) (tmpDir string, rpmSourceDir string, teardown func()) { + tmpDir, err := os.MkdirTemp("", "eib-RPM-") require.NoError(t, err) - defer os.RemoveAll(tmpDir) - rpmSourceDir := filepath.Join(tmpDir, "rpms") + rpmSourceDir = filepath.Join(tmpDir, "rpms") err = os.Mkdir(rpmSourceDir, 0o755) require.NoError(t, err) - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() + var file1 *os.File + var file2 *os.File + if addFiles { + file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") + file1, err = os.Create(file1Path) + require.NoError(t, err) + + file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") + file2, err = os.Create(file2Path) + require.NoError(t, err) + } + + return tmpDir, rpmSourceDir, func() { + if addFiles { + assert.NoError(t, file1.Close()) + assert.NoError(t, file2.Close()) + } + assert.NoError(t, os.RemoveAll(tmpDir)) + } +} - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() +func TestGetRPMFileNames(t *testing.T) { + // Setup + _, rpmSourceDir, teardown := setupRPMSourceDir(t, true) + defer teardown() // Test rpmFileNames, err := getRPMFileNames(rpmSourceDir) @@ -42,13 +56,8 @@ func TestGetRPMFileNames(t *testing.T) { func TestCopyRPMs(t *testing.T) { // Setup - tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - rpmSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(rpmSourceDir, 0o755) - require.NoError(t, err) + _, rpmSourceDir, teardown := setupRPMSourceDir(t, true) + defer teardown() context, err := NewContext("", "", true) require.NoError(t, err) @@ -58,16 +67,6 @@ func TestCopyRPMs(t *testing.T) { builder := Builder{context: context} - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() - // Test err = copyRPMs(rpmSourceDir, builder.context.CombustionDir, []string{"rpm1.rpm", "rpm2.rpm"}) @@ -83,13 +82,8 @@ func TestCopyRPMs(t *testing.T) { func TestGetRPMFileNamesNoRPMs(t *testing.T) { // Setup - tmpDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-no-RPMs") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - rpmSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(rpmSourceDir, 0o755) - require.NoError(t, err) + _, rpmSourceDir, teardown := setupRPMSourceDir(t, false) + defer teardown() // Test rpmFileNames, err := getRPMFileNames(rpmSourceDir) @@ -102,26 +96,11 @@ func TestGetRPMFileNamesNoRPMs(t *testing.T) { func TestCopyRPMsNoRPMDestDir(t *testing.T) { // Setup - tmpSrcDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpSrcDir) - - rpmSourceDir := filepath.Join(tmpSrcDir, "rpms") - err = os.Mkdir(rpmSourceDir, 0o755) - require.NoError(t, err) - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() + _, rpmSourceDir, teardown := setupRPMSourceDir(t, true) + defer teardown() // Test - err = copyRPMs(rpmSourceDir, "", []string{"rpm1.rpm", "rpm2.rpm"}) + err := copyRPMs(rpmSourceDir, "", []string{"rpm1.rpm", "rpm2.rpm"}) // Verify require.ErrorContains(t, err, "RPM destination directory cannot be empty") @@ -129,12 +108,11 @@ func TestCopyRPMsNoRPMDestDir(t *testing.T) { func TestCopyRPMsNoRPMSrcDir(t *testing.T) { // Setup - tmpDestDir, err := os.MkdirTemp("", "eib-copy-RPMs-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDestDir) + tmpDestDir, _, teardown := setupRPMSourceDir(t, true) + defer teardown() // Test - err = copyRPMs("", tmpDestDir, []string{"rpm1.rpm", "rpm2.rpm"}) + err := copyRPMs("", tmpDestDir, []string{"rpm1.rpm", "rpm2.rpm"}) // Verify require.ErrorContains(t, err, "opening source file") @@ -142,13 +120,8 @@ func TestCopyRPMsNoRPMSrcDir(t *testing.T) { func TestWriteRPMScript(t *testing.T) { // Setup - tmpDir, err := os.MkdirTemp("", "eib-write-RPM-script-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - rpmSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(rpmSourceDir, 0o755) - require.NoError(t, err) + _, _, teardown := setupRPMSourceDir(t, true) + defer teardown() context, err := NewContext("", "", true) require.NoError(t, err) @@ -158,16 +131,6 @@ func TestWriteRPMScript(t *testing.T) { builder := Builder{context: context} - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() - // Test err = builder.writeRPMScript([]string{"rpm1.rpm", "rpm2.rpm"}) @@ -189,23 +152,8 @@ func TestWriteRPMScript(t *testing.T) { func TestProcessRPMs(t *testing.T) { // Setup - tmpDir, err := os.MkdirTemp("", "eib-process-RPMs-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - rpmSourceDir := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(rpmSourceDir, 0o755) - require.NoError(t, err) - - file1Path := filepath.Join(rpmSourceDir, "rpm1.rpm") - file1, err := os.Create(file1Path) - require.NoError(t, err) - defer file1.Close() - - file2Path := filepath.Join(rpmSourceDir, "rpm2.rpm") - file2, err := os.Create(file2Path) - require.NoError(t, err) - defer file2.Close() + tmpDir, _, teardown := setupRPMSourceDir(t, true) + defer teardown() context, err := NewContext(tmpDir, "", true) require.NoError(t, err) @@ -238,13 +186,8 @@ func TestProcessRPMs(t *testing.T) { func TestGenerateRPMPath(t *testing.T) { // Setup - tmpDir, err := os.MkdirTemp("", "eib-generate-RPM-path-test-") - require.NoError(t, err) - defer os.RemoveAll(tmpDir) - - expectedPath := filepath.Join(tmpDir, "rpms") - err = os.Mkdir(expectedPath, 0o755) - require.NoError(t, err) + tmpDir, expectedPath, teardown := setupRPMSourceDir(t, false) + defer teardown() context, err := NewContext(tmpDir, "", true) require.NoError(t, err) @@ -265,7 +208,10 @@ func TestGenerateRPMPath(t *testing.T) { func TestGenerateRPMPathNoRPMDir(t *testing.T) { // Setup - context, err := NewContext("", "", true) + tmpDir, _, teardown := setupRPMSourceDir(t, false) + defer teardown() + + context, err := NewContext(tmpDir, "", true) require.NoError(t, err) defer func() { assert.NoError(t, CleanUpBuildDir(context)) From 167ffb22860da171b9da6b99111059922dd6d28f Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:03:54 -0500 Subject: [PATCH 16/18] further updates to tests --- pkg/build/rpm_test.go | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index 307fd900..81fdce88 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -56,27 +56,23 @@ func TestGetRPMFileNames(t *testing.T) { func TestCopyRPMs(t *testing.T) { // Setup - _, rpmSourceDir, teardown := setupRPMSourceDir(t, true) + tmpDir, rpmSourceDir, teardown := setupRPMSourceDir(t, true) defer teardown() - context, err := NewContext("", "", true) + tmpDestDir := filepath.Join(tmpDir, "temp-dest-dir") + err := os.Mkdir(tmpDestDir, 0o755) require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := Builder{context: context} // Test - err = copyRPMs(rpmSourceDir, builder.context.CombustionDir, []string{"rpm1.rpm", "rpm2.rpm"}) + err = copyRPMs(rpmSourceDir, tmpDestDir, []string{"rpm1.rpm", "rpm2.rpm"}) // Verify require.NoError(t, err) - _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm1.rpm")) + _, err = os.Stat(filepath.Join(tmpDestDir, "rpm1.rpm")) require.NoError(t, err) - _, err = os.Stat(filepath.Join(builder.context.CombustionDir, "rpm2.rpm")) + _, err = os.Stat(filepath.Join(tmpDestDir, "rpm2.rpm")) require.NoError(t, err) } @@ -205,23 +201,3 @@ func TestGenerateRPMPath(t *testing.T) { assert.Equal(t, expectedPath, generatedPath) } - -func TestGenerateRPMPathNoRPMDir(t *testing.T) { - // Setup - tmpDir, _, teardown := setupRPMSourceDir(t, false) - defer teardown() - - context, err := NewContext(tmpDir, "", true) - require.NoError(t, err) - defer func() { - assert.NoError(t, CleanUpBuildDir(context)) - }() - - builder := Builder{context: context} - - // Test - _, err = builder.generateRPMPath() - - // Verify - require.NoError(t, err) -} From 6d6284c964de45e2305964bcd763aed9ece45446 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Thu, 16 Nov 2023 13:14:57 -0500 Subject: [PATCH 17/18] removed unnecessary setup in test --- pkg/build/rpm_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkg/build/rpm_test.go b/pkg/build/rpm_test.go index 81fdce88..9c1f860a 100644 --- a/pkg/build/rpm_test.go +++ b/pkg/build/rpm_test.go @@ -116,9 +116,6 @@ func TestCopyRPMsNoRPMSrcDir(t *testing.T) { func TestWriteRPMScript(t *testing.T) { // Setup - _, _, teardown := setupRPMSourceDir(t, true) - defer teardown() - context, err := NewContext("", "", true) require.NoError(t, err) defer func() { From 159b13f7c9fa58e1734b67568d231cacfa504d96 Mon Sep 17 00:00:00 2001 From: dbw7 <90856056+dbw7@users.noreply.github.com> Date: Thu, 16 Nov 2023 20:49:13 -0500 Subject: [PATCH 18/18] changed build order finishing touch, processRPMs needs to come before generateCombustionScript so that the rpm script is registered --- pkg/build/build.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/build/build.go b/pkg/build/build.go index d13e4dae..44ba3165 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -39,14 +39,14 @@ func (b *Builder) Build() error { return fmt.Errorf("configuring custom scripts: %w", err) } - err = b.generateCombustionScript() + err = b.processRPMs() if err != nil { - return fmt.Errorf("generating combustion script: %w", err) + return fmt.Errorf("processing RPMs: %w", err) } - err = b.processRPMs() + err = b.generateCombustionScript() if err != nil { - return fmt.Errorf("processing RPMs: %w", err) + return fmt.Errorf("generating combustion script: %w", err) } switch b.imageConfig.Image.ImageType {