github.com/kubeshop/testkube@v1.17.23/contrib/executor/maven/pkg/runner/runner_integration_test.go (about)

     1  package runner
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	cp "github.com/otiai10/copy"
    11  	"github.com/stretchr/testify/assert"
    12  
    13  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    14  	"github.com/kubeshop/testkube/pkg/envs"
    15  	"github.com/kubeshop/testkube/pkg/utils/test"
    16  )
    17  
    18  func TestRun_Integration(t *testing.T) {
    19  	test.IntegrationTest(t)
    20  	t.Parallel()
    21  
    22  	ctx := context.Background()
    23  
    24  	t.Run("run maven wrapper test goal with envs", func(t *testing.T) {
    25  		t.Parallel()
    26  		// setup
    27  		tempDir, err := os.MkdirTemp("", "*")
    28  		assert.NoErrorf(t, err, "failed to create temp dir: %v", err)
    29  		defer os.RemoveAll(tempDir)
    30  		repoDir := filepath.Join(tempDir, "repo")
    31  		assert.NoError(t, os.Mkdir(repoDir, 0755))
    32  		_ = cp.Copy("../../examples/hello-mvnw", repoDir)
    33  
    34  		// given
    35  		params := envs.Params{DataDir: tempDir}
    36  		_, err = NewRunner(context.Background(), params)
    37  		assert.NoError(t, err)
    38  
    39  		execution := testkube.NewQueuedExecution()
    40  		execution.TestType = "maven/test"
    41  		execution.Content = &testkube.TestContent{
    42  			Type_: string(testkube.TestContentTypeGitDir),
    43  			Repository: &testkube.Repository{
    44  				Uri:    "someuri",
    45  				Branch: "main",
    46  			},
    47  		}
    48  		execution.Command = []string{"mvn"}
    49  		execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"}
    50  
    51  		execution.Variables = map[string]testkube.Variable{
    52  			"wrapper": {Name: "TESTKUBE_MAVEN_WRAPPER", Value: "true", Type_: testkube.VariableTypeBasic},
    53  		}
    54  
    55  		assert.NoError(t, os.Setenv("TESTKUBE_MAVEN_WRAPPER", "true"))
    56  		// when
    57  
    58  		// TODO: fix flaky tests:  TKC-923
    59  		// result, err := runner.Run(ctx, *execution)
    60  
    61  		// then
    62  		// assert.NoError(t, err)
    63  		// assert.Equal(t, testkube.ExecutionStatusPassed, result.Status)
    64  		// assert.Len(t, result.Steps, 1)
    65  	})
    66  
    67  	t.Run("run maven project with test task and envs", func(t *testing.T) {
    68  		t.Parallel()
    69  		// setup
    70  		tempDir, err := os.MkdirTemp("", "*")
    71  		assert.NoErrorf(t, err, "failed to create temp dir: %v", err)
    72  		defer os.RemoveAll(tempDir)
    73  		repoDir := filepath.Join(tempDir, "repo")
    74  		assert.NoError(t, os.Mkdir(repoDir, 0755))
    75  		_ = cp.Copy("../../examples/hello-maven", repoDir)
    76  
    77  		// given
    78  		params := envs.Params{DataDir: tempDir}
    79  		runner, err := NewRunner(context.Background(), params)
    80  		assert.NoError(t, err)
    81  
    82  		execution := testkube.NewQueuedExecution()
    83  		execution.TestType = "maven/project"
    84  		execution.Content = &testkube.TestContent{
    85  			Type_: string(testkube.TestContentTypeGitDir),
    86  			Repository: &testkube.Repository{
    87  				Uri:    "someur",
    88  				Branch: "main",
    89  			},
    90  		}
    91  		execution.Command = []string{"mvn"}
    92  		execution.Args = []string{"test", "--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"}
    93  		execution.Variables = map[string]testkube.Variable{
    94  			"wrapper": {Name: "TESTKUBE_MAVEN", Value: "true", Type_: testkube.VariableTypeBasic},
    95  		}
    96  
    97  		assert.NoError(t, os.Setenv("TESTKUBE_MAVEN", "true"))
    98  		// when
    99  		result, err := runner.Run(ctx, *execution)
   100  
   101  		// then
   102  		assert.NoError(t, err)
   103  		assert.Equal(t, testkube.ExecutionStatusPassed, result.Status)
   104  		assert.Len(t, result.Steps, 1)
   105  	})
   106  
   107  	t.Run("run maven wrapper test goal with envs", func(t *testing.T) {
   108  		t.Parallel()
   109  		// setup
   110  		tempDir, err := os.MkdirTemp("", "*")
   111  		assert.NoErrorf(t, err, "failed to create temp dir: %v", err)
   112  		defer os.RemoveAll(tempDir)
   113  		repoDir := filepath.Join(tempDir, "repo")
   114  		assert.NoError(t, os.Mkdir(repoDir, 0755))
   115  		_ = cp.Copy("../../examples/hello-mvnw", repoDir)
   116  
   117  		// given
   118  		params := envs.Params{DataDir: tempDir}
   119  		runner, err := NewRunner(context.Background(), params)
   120  		assert.NoError(t, err)
   121  
   122  		execution := testkube.NewQueuedExecution()
   123  		execution.TestType = "maven/test"
   124  		execution.Content = &testkube.TestContent{
   125  			Type_: string(testkube.TestContentTypeGitDir),
   126  			Repository: &testkube.Repository{
   127  				Uri:    "https://github.com/lreimer/hands-on-testkube.git",
   128  				Branch: "main",
   129  			},
   130  		}
   131  		execution.Command = []string{"mvn"}
   132  		execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"}
   133  		execution.Envs = map[string]string{"TESTKUBE_MAVEN_WRAPPER": "true"}
   134  
   135  		assert.NoError(t, os.Setenv("TESTKUBE_MAVEN_WRAPPER", "true"))
   136  		// when
   137  		result, err := runner.Run(ctx, *execution)
   138  
   139  		// then
   140  		assert.NoError(t, err)
   141  		assert.Equal(t, testkube.ExecutionStatusPassed, result.Status)
   142  		assert.Len(t, result.Steps, 1)
   143  	})
   144  
   145  	t.Run("run maven project with settings.xml", func(t *testing.T) {
   146  		t.Parallel()
   147  		// setup
   148  		tempDir, err := os.MkdirTemp("", "*")
   149  		assert.NoErrorf(t, err, "failed to create temp dir: %v", err)
   150  		defer os.RemoveAll(tempDir)
   151  		repoDir := filepath.Join(tempDir, "repo")
   152  		assert.NoError(t, os.Mkdir(repoDir, 0755))
   153  		_ = cp.Copy("../../examples/hello-maven-settings", repoDir)
   154  
   155  		// given
   156  		params := envs.Params{DataDir: tempDir}
   157  		runner, err := NewRunner(context.Background(), params)
   158  		assert.NoError(t, err)
   159  
   160  		execution := testkube.NewQueuedExecution()
   161  		execution.TestType = "maven/test"
   162  		execution.Content = &testkube.TestContent{
   163  			Type_: string(testkube.TestContentTypeGitDir),
   164  			Repository: &testkube.Repository{
   165  				Uri:    "someuri",
   166  				Branch: "main",
   167  			},
   168  		}
   169  		execution.Command = []string{"mvn"}
   170  		execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"}
   171  		execution.Variables = map[string]testkube.Variable{
   172  			"wrapper": {Name: "TESTKUBE_MAVEN", Value: "true", Type_: testkube.VariableTypeBasic},
   173  		}
   174  		settingsContent, err := os.ReadFile(fmt.Sprintf("%s/settings.xml", repoDir))
   175  		assert.NoError(t, err)
   176  		execution.VariablesFile = string(settingsContent)
   177  
   178  		assert.NoError(t, os.Setenv("TESTKUBE_MAVEN", "true"))
   179  		// when
   180  		result, err := runner.Run(ctx, *execution)
   181  
   182  		// then
   183  		assert.NoError(t, err)
   184  		assert.Equal(t, testkube.ExecutionStatusPassed, result.Status)
   185  		assert.Len(t, result.Steps, 1)
   186  	})
   187  }
   188  
   189  func TestRunErrors_Integration(t *testing.T) {
   190  	test.IntegrationTest(t)
   191  	t.Parallel()
   192  
   193  	ctx := context.Background()
   194  
   195  	t.Run("no RUNNER_DATADIR", func(t *testing.T) {
   196  		t.Parallel()
   197  		// given
   198  		params := envs.Params{DataDir: "/unknown"}
   199  		runner, err := NewRunner(context.Background(), params)
   200  		assert.NoError(t, err)
   201  
   202  		execution := testkube.NewQueuedExecution()
   203  		execution.Command = []string{"mvn"}
   204  		execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"}
   205  
   206  		// when
   207  		_, err = runner.Run(ctx, *execution)
   208  
   209  		// then
   210  		assert.Error(t, err)
   211  	})
   212  
   213  	t.Run("unsupported file-content", func(t *testing.T) {
   214  		t.Parallel()
   215  
   216  		tempDir, err := os.MkdirTemp("", "*")
   217  		assert.NoErrorf(t, err, "failed to create temp dir: %v", err)
   218  		defer os.RemoveAll(tempDir)
   219  
   220  		// given
   221  		params := envs.Params{DataDir: tempDir}
   222  		runner, err := NewRunner(context.Background(), params)
   223  		assert.NoError(t, err)
   224  
   225  		execution := testkube.NewQueuedExecution()
   226  		execution.TestType = "maven/test"
   227  		execution.Content = testkube.NewStringTestContent("")
   228  		execution.Command = []string{"mvn"}
   229  		execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"}
   230  
   231  		// when
   232  		_, err = runner.Run(ctx, *execution)
   233  
   234  		// then
   235  		assert.Error(t, err)
   236  	})
   237  
   238  	t.Run("no pom.xml", func(t *testing.T) {
   239  		t.Parallel()
   240  
   241  		// setup
   242  		tempDir, err := os.MkdirTemp("", "*")
   243  		assert.NoErrorf(t, err, "failed to create temp dir: %v", err)
   244  		defer os.RemoveAll(tempDir)
   245  		repoDir := filepath.Join(tempDir, "repo")
   246  		assert.NoError(t, os.Mkdir(repoDir, 0755))
   247  
   248  		// given
   249  		params := envs.Params{DataDir: tempDir}
   250  		runner, err := NewRunner(context.Background(), params)
   251  		assert.NoError(t, err)
   252  
   253  		execution := testkube.NewQueuedExecution()
   254  		execution.TestType = "maven/test"
   255  		execution.Content = &testkube.TestContent{
   256  			Type_: string(testkube.TestContentTypeGitDir),
   257  			Repository: &testkube.Repository{
   258  				Uri:    "https://github.com/lreimer/hands-on-testkube.git",
   259  				Branch: "main",
   260  			},
   261  		}
   262  		execution.Command = []string{"mvn"}
   263  		execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"}
   264  
   265  		// when
   266  		result, err := runner.Run(ctx, *execution)
   267  
   268  		// then
   269  		assert.NoError(t, err)
   270  		assert.Equal(t, result.Status, testkube.ExecutionStatusFailed)
   271  		assert.Contains(t, result.ErrorMessage, "no")
   272  	})
   273  }
   274  
   275  func TestRunMavenProject_Integration(t *testing.T) {
   276  	test.IntegrationTest(t)
   277  	t.Parallel()
   278  
   279  	ctx := context.Background()
   280  
   281  	t.Run("run maven project with test task and envs", func(t *testing.T) {
   282  		t.Parallel()
   283  		// setup
   284  		tempDir, err := os.MkdirTemp("", "*")
   285  		assert.NoErrorf(t, err, "failed to create temp dir: %v", err)
   286  		defer os.RemoveAll(tempDir)
   287  		repoDir := filepath.Join(tempDir, "repo")
   288  		assert.NoError(t, os.Mkdir(repoDir, 0755))
   289  		_ = cp.Copy("../../examples/hello-maven", repoDir)
   290  
   291  		// given
   292  		params := envs.Params{DataDir: tempDir}
   293  		runner, err := NewRunner(context.Background(), params)
   294  		assert.NoError(t, err)
   295  
   296  		execution := testkube.NewQueuedExecution()
   297  		execution.TestType = "maven/project"
   298  		execution.Content = &testkube.TestContent{
   299  			Type_: string(testkube.TestContentTypeGitDir),
   300  			Repository: &testkube.Repository{
   301  				Uri:    "https://github.com/lreimer/hands-on-testkube.git",
   302  				Branch: "main",
   303  			},
   304  		}
   305  		execution.Command = []string{"mvn"}
   306  		execution.Args = []string{"test", "--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"}
   307  		execution.Variables = map[string]testkube.Variable{
   308  			"wrapper": {Name: "TESTKUBE_MAVEN", Value: "true", Type_: testkube.VariableTypeBasic},
   309  		}
   310  
   311  		assert.NoError(t, os.Setenv("TESTKUBE_MAVEN", "true"))
   312  
   313  		// when
   314  		result, err := runner.Run(ctx, *execution)
   315  
   316  		// then
   317  		assert.NoError(t, err)
   318  		assert.Equal(t, result.Status, testkube.ExecutionStatusPassed)
   319  		assert.Len(t, result.Steps, 1)
   320  	})
   321  }