Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding system tests #399

Merged
merged 39 commits into from
Feb 11, 2025
Merged
Changes from 24 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
122d4da
Refactor existing tests
Vahila Dec 24, 2024
95fabb5
Add system tests for Run MATLAB Command step
Vahila Dec 31, 2024
db9eb7c
Set up main.yml to run system tests
Vahila Dec 31, 2024
42a5d44
Update maven goal
Vahila Jan 2, 2025
60e88f8
Update version
Vahila Jan 2, 2025
9e9f57c
Update test set up
Vahila Jan 6, 2025
309b23d
Add tests for Matrix project
Vahila Jan 6, 2025
42730cc
Add tests for Run MATLAB Tests build step
Vahila Jan 6, 2025
b8921ad
Add tests for Artifacts generation
Vahila Jan 6, 2025
2ce87ae
Add tests for Customize Test Run
Vahila Jan 6, 2025
dc4aab5
Add tests for MATLAB Global Tool
Vahila Jan 6, 2025
21763ac
Add tests for Start Up options
Vahila Jan 6, 2025
62dcd17
Add test data
Vahila Jan 6, 2025
71a7d4c
Update main.yml
Vahila Jan 6, 2025
e96379a
Add tests for MPMinstall feature
Vahila Jan 8, 2025
1e85a8f
Update FilterTestData.zip
Vahila Jan 20, 2025
14276c4
Use Java 11 in set up
Vahila Jan 20, 2025
0140125
Add tests for Run MATLAB Build step
Vahila Jan 20, 2025
eba0e3f
Refactor tests
Vahila Jan 20, 2025
a52b697
Use mvn verify
Vahila Jan 20, 2025
53be112
Update failing test
Vahila Jan 20, 2025
e0d7182
Merge branch 'integ_tests' of https://github.com/mathworks/jenkins-ma…
Vahila Jan 20, 2025
bcb085d
Delete MPMInstallIT.java
Vahila Jan 20, 2025
de3da63
Refactor tests
Vahila Jan 20, 2025
c50d60a
Merge branch '2.16.0-SNAPSHOT-Qualification' into integ_tests
Vahila Jan 23, 2025
3df9592
Address review comments
Vahila Jan 30, 2025
7f26d59
Remove scratch file related tests
Vahila Feb 4, 2025
30e5eb0
Update indentation
Vahila Feb 4, 2025
0abb319
Remove sleep statements
Vahila Feb 4, 2025
191def8
Add verify goal for failsafe plugin
Vahila Feb 5, 2025
1dbb9b1
Update package
Vahila Feb 5, 2025
d69e644
Use teat data
Vahila Feb 5, 2025
87dd4e6
Update package name
Vahila Feb 5, 2025
004d7c9
Use maven in batch mode
Vahila Feb 5, 2025
b6fdbf7
Update failing test
Vahila Feb 5, 2025
35e5f1d
Remove unused function
Vahila Feb 5, 2025
5a6ab02
Delete azure-pipelines.yml
Vahila Feb 5, 2025
c73c73a
Remove timeout
Vahila Feb 11, 2025
b19294f
Merge remote-tracking branch 'origin/dev_main' into integ_tests
Vahila Feb 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: using mpm to install MATLAB
on: push
jobs:
my-job:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
name: Run System tests
runs-on: ${{ matrix.os }}
steps:
- name: Check out repository
uses: actions/checkout@v2

- name: Setup Java 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'

- name: Setup MATLAB
id: setup-matlab
uses: matlab-actions/setup-matlab@v2

- name: Running tests
run: mvn verify
env:
MATLAB_ROOT: ${{ steps.setup-matlab.outputs.matlabroot }}
MLM_LICENSE_TOKEN: ${{ secrets.MLM_LICENSE_TOKEN}}
65 changes: 65 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -125,6 +125,35 @@
<version>11.0.24</version>
<scope>test</scope>
</dependency>

<!-- Dependencies for system tests -->
<!-- https://mvnrepository.com/artifact/com.jcabi/jcabi-xml -->
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-xml</artifactId>
<version>0.23.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jenkinsci.plugins/pipeline-model-definition -->
<dependency>
<groupId>org.jenkinsci.plugins</groupId>
<artifactId>pipeline-model-definition</artifactId>
</dependency>
<!-- Need unzip to add the files in pipeline workspace -->
<!-- https://mvnrepository.com/artifact/org.jenkins-ci.plugins/pipeline-utility-steps -->
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>pipeline-utility-steps</artifactId>
<version>2.7.1</version>
<scope>test</scope>
</dependency>
<!-- TODO: see if this is necessary Using for verifyCodeCoverage -->
<!-- https://mvnrepository.com/artifact/org.jenkins-ci.plugins/cobertura -->
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>cobertura</artifactId>
<version>1.16</version>
</dependency>

</dependencies>
<build>
<plugins>
@@ -215,6 +244,42 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
</goals>
<configuration>
<includes>
<include>**/*IT.java</include>
</includes>
<excludes>
<exclude>**/*Test.java</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/*Test.java</include>
<include>**/*Tester.java</include>
</includes>
<excludes>
<exclude>**/*IT.java</exclude>>
</excludes>
</configuration>
</plugin>

</plugins>
<pluginManagement>
<plugins>
Original file line number Diff line number Diff line change
@@ -1,136 +1,136 @@
package unit.com.mathworks.ci.actions;
/**
* Copyright 2024, The MathWorks Inc.
*/
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.file.Files;
import org.junit.Test;
import org.junit.Before;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
import hudson.FilePath;
import hudson.model.Run;
import hudson.model.TaskListener;
import com.mathworks.ci.MatlabBuilderConstants;
import com.mathworks.ci.BuildArtifactAction;
import com.mathworks.ci.BuildConsoleAnnotator;
import com.mathworks.ci.MatlabExecutionException;
import com.mathworks.ci.actions.RunMatlabCommandAction;
import com.mathworks.ci.utilities.MatlabCommandRunner;
import com.mathworks.ci.parameters.CommandActionParameters;
@RunWith(MockitoJUnitRunner.Silent.class)
public class MatlabActionTest {
@Mock
CommandActionParameters params;
@Mock
BuildConsoleAnnotator annotator;
@Mock
MatlabCommandRunner runner;
@Mock
PrintStream out;
@Mock
TaskListener listener;
@Mock
Run build;
@Mock
FilePath tempFolder;
private boolean setup = false;
private RunMatlabCommandAction action;
// Not using @BeforeClass to avoid static fields.
@Before
public void init() {
if (!setup) {
setup = true;
action = new RunMatlabCommandAction(runner, annotator, params);
when(runner.getTempFolder()).thenReturn(tempFolder);
when(tempFolder.getRemote()).thenReturn("/path/less/traveled");
when(params.getTaskListener()).thenReturn(listener);
when(listener.getLogger()).thenReturn(out);
when(params.getBuild()).thenReturn(build);
}
}
@Test
public void shouldCopyPluginsToTempDirectory() throws IOException, InterruptedException, MatlabExecutionException {
action.run();
InOrder inOrder = inOrder(runner);
inOrder.verify(runner)
.copyFileToTempFolder(MatlabBuilderConstants.DEFAULT_PLUGIN, MatlabBuilderConstants.DEFAULT_PLUGIN);
inOrder.verify(runner)
.copyFileToTempFolder(MatlabBuilderConstants.BUILD_REPORT_PLUGIN,
MatlabBuilderConstants.BUILD_REPORT_PLUGIN);
inOrder.verify(runner)
.copyFileToTempFolder(MatlabBuilderConstants.TASK_RUN_PROGRESS_PLUGIN,
MatlabBuilderConstants.TASK_RUN_PROGRESS_PLUGIN);
}
@Test
public void shouldOverrideDefaultBuildtoolPlugin()
throws IOException, InterruptedException, MatlabExecutionException {
action.run();
verify(runner).addEnvironmentVariable(
"MW_MATLAB_BUILDTOOL_DEFAULT_PLUGINS_FCN_OVERRIDE",
"ciplugins.jenkins.getDefaultPlugins");
}
@Test
public void shouldCopyBuildResultsToRootAndAddAction()
throws IOException, InterruptedException, MatlabExecutionException {
File tmp = Files.createTempDirectory("temp").toFile();
tmp.deleteOnExit();
File dest = Files.createTempDirectory("dest").toFile();
dest.deleteOnExit();
File json = new File(tmp, "buildArtifact.json");
json.createNewFile();
doReturn(new FilePath(tmp)).when(runner).getTempFolder();
doReturn(dest).when(build).getRootDir();
action.run();
// Should have deleted original file
assertFalse(json.exists());
// Should have copied file to root dir
assertTrue(new File(dest, "buildArtifact" + action.getActionID() + ".json").exists());
}
@Test
public void shouldNotAddActionIfNoBuildResult() throws IOException, InterruptedException, MatlabExecutionException {
action.run();
verify(build, never()).addAction(any(BuildArtifactAction.class));
}
@Test
public void shouldRemoveTempFolder() throws IOException, InterruptedException, MatlabExecutionException {
action.run();
verify(runner).removeTempFolder();
}
}
package unit.com.mathworks.ci.actions;

/**
* Copyright 2024, The MathWorks Inc.
*/

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.file.Files;

import org.junit.Test;
import org.junit.Before;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;

import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;

import hudson.FilePath;
import hudson.model.Run;
import hudson.model.TaskListener;

import com.mathworks.ci.MatlabBuilderConstants;
import com.mathworks.ci.BuildArtifactAction;
import com.mathworks.ci.BuildConsoleAnnotator;
import com.mathworks.ci.MatlabExecutionException;
import com.mathworks.ci.actions.RunMatlabCommandAction;
import com.mathworks.ci.utilities.MatlabCommandRunner;
import com.mathworks.ci.parameters.CommandActionParameters;

@RunWith(MockitoJUnitRunner.Silent.class)
public class MatlabActionTest {
@Mock
CommandActionParameters params;
@Mock
BuildConsoleAnnotator annotator;
@Mock
MatlabCommandRunner runner;
@Mock
PrintStream out;
@Mock
TaskListener listener;
@Mock
Run build;

@Mock
FilePath tempFolder;

private boolean setup = false;
private RunMatlabCommandAction action;

// Not using @BeforeClass to avoid static fields.
@Before
public void init() {
if (!setup) {
setup = true;
action = new RunMatlabCommandAction(runner, annotator, params);

when(runner.getTempFolder()).thenReturn(tempFolder);
when(tempFolder.getRemote()).thenReturn("/path/less/traveled");

when(params.getTaskListener()).thenReturn(listener);
when(listener.getLogger()).thenReturn(out);

when(params.getBuild()).thenReturn(build);
}
}

@Test
public void shouldCopyPluginsToTempDirectory() throws IOException, InterruptedException, MatlabExecutionException {
action.run();

InOrder inOrder = inOrder(runner);

inOrder.verify(runner)
.copyFileToTempFolder(MatlabBuilderConstants.DEFAULT_PLUGIN, MatlabBuilderConstants.DEFAULT_PLUGIN);
inOrder.verify(runner)
.copyFileToTempFolder(MatlabBuilderConstants.BUILD_REPORT_PLUGIN,
MatlabBuilderConstants.BUILD_REPORT_PLUGIN);
inOrder.verify(runner)
.copyFileToTempFolder(MatlabBuilderConstants.TASK_RUN_PROGRESS_PLUGIN,
MatlabBuilderConstants.TASK_RUN_PROGRESS_PLUGIN);
}

@Test
public void shouldOverrideDefaultBuildtoolPlugin()
throws IOException, InterruptedException, MatlabExecutionException {
action.run();

verify(runner).addEnvironmentVariable(
"MW_MATLAB_BUILDTOOL_DEFAULT_PLUGINS_FCN_OVERRIDE",
"ciplugins.jenkins.getDefaultPlugins");
}

@Test
public void shouldCopyBuildResultsToRootAndAddAction()
throws IOException, InterruptedException, MatlabExecutionException {
File tmp = Files.createTempDirectory("temp").toFile();
tmp.deleteOnExit();

File dest = Files.createTempDirectory("dest").toFile();
dest.deleteOnExit();

File json = new File(tmp, "buildArtifact.json");
json.createNewFile();

doReturn(new FilePath(tmp)).when(runner).getTempFolder();
doReturn(dest).when(build).getRootDir();

action.run();

// Should have deleted original file
assertFalse(json.exists());
// Should have copied file to root dir
assertTrue(new File(dest, "buildArtifact" + action.getActionID() + ".json").exists());
}

@Test
public void shouldNotAddActionIfNoBuildResult() throws IOException, InterruptedException, MatlabExecutionException {
action.run();

verify(build, never()).addAction(any(BuildArtifactAction.class));
}

@Test
public void shouldRemoveTempFolder() throws IOException, InterruptedException, MatlabExecutionException {
action.run();

verify(runner).removeTempFolder();
}
}
Loading