Skip to content

Commit 958ee03

Browse files
committed
Add Docker curation audit integration test
1 parent 4c0adc9 commit 958ee03

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

.github/workflows/test.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,10 @@ jobs:
309309
- name: Install and Setup Dependencies
310310
uses: ./.github/actions/install-and-setup
311311

312+
- name: Docker Login
313+
if: runner.os == 'Linux'
314+
run: echo "${{ secrets.PLATFORM_ADMIN_TOKEN }}" | docker login ${{ secrets.CONTAINER_REGISTRY }} -u admin --password-stdin
315+
312316
# Test
313317
- name: Run tests
314318
run: go test ${{ env.GO_COMMON_TEST_ARGS }} --test.curation --test.enrich --ci.runId=${{ runner.os }}-sec-test

curation_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/stretchr/testify/assert"
1414
"github.com/stretchr/testify/require"
1515

16+
"github.com/jfrog/jfrog-cli-security/cli"
1617
"github.com/jfrog/jfrog-cli-security/commands/curation"
1718
securityTests "github.com/jfrog/jfrog-cli-security/tests"
1819
securityTestUtils "github.com/jfrog/jfrog-cli-security/tests/utils"
@@ -105,6 +106,53 @@ func getCurationExpectedResponse(config *config.ServerDetails) []curation.Packag
105106
return expectedResp
106107
}
107108

109+
func TestDockerCurationAudit(t *testing.T) {
110+
integration.InitCurationTest(t)
111+
if securityTests.ContainerRegistry == nil || *securityTests.ContainerRegistry == "" {
112+
t.Skip("Skipping Docker curation test - container registry not configured")
113+
}
114+
115+
cleanUpJfrogHome, err := coreTests.SetJfrogHome()
116+
assert.NoError(t, err)
117+
defer cleanUpJfrogHome()
118+
119+
serverDetails := &config.ServerDetails{
120+
ServerId: "default",
121+
Url: *securityTests.JfrogUrl,
122+
ArtifactoryUrl: *securityTests.JfrogUrl + securityTests.ArtifactoryEndpoint,
123+
XrayUrl: *securityTests.JfrogUrl + securityTests.XrayEndpoint,
124+
AccessToken: *securityTests.JfrogAccessToken,
125+
}
126+
configCmd := commonCommands.NewConfigCommand(commonCommands.AddOrEdit, serverDetails.ServerId).
127+
SetDetails(serverDetails).
128+
SetInteractive(false)
129+
assert.NoError(t, configCmd.Run())
130+
131+
testCli := integration.GetXrayTestCli(cli.GetJfrogCliSecurityApp(), false)
132+
133+
testImage := fmt.Sprintf("%s/%s/%s", *securityTests.ContainerRegistry, "docker-curation", "ganodndentcom/drupal")
134+
135+
output := testCli.WithoutCredentials().RunCliCmdWithOutput(t, "curation-audit",
136+
"--image="+testImage,
137+
"--format="+string(format.Json))
138+
139+
if strings.Contains(output, "docker.sock") || strings.Contains(output, "docker daemon") {
140+
t.Skip("Skipping Docker curation test - Docker is not running")
141+
}
142+
143+
var results []curation.PackageStatus
144+
bracketIndex := strings.Index(output, "[")
145+
err = json.Unmarshal([]byte(output[bracketIndex:]), &results)
146+
require.NoError(t, err)
147+
148+
require.NotEmpty(t, results, "Expected at least one blocked package")
149+
assert.Equal(t, "blocked", results[0].Action)
150+
assert.Equal(t, "ganodndentcom/drupal", results[0].PackageName)
151+
assert.Equal(t, curation.BlockingReasonPolicy, results[0].BlockingReason)
152+
require.NotEmpty(t, results[0].Policy, "Expected at least one policy violation")
153+
assert.Equal(t, "Malicious package", results[0].Policy[0].Condition)
154+
}
155+
108156
func curationServer(t *testing.T, expectedRequest map[string]bool, requestToFail map[string]bool) (*httptest.Server, *config.ServerDetails) {
109157
mapLockReadWrite := sync.Mutex{}
110158
serverMock, config, _ := commonTests.CreateRtRestsMockServer(t, func(w http.ResponseWriter, r *http.Request) {

0 commit comments

Comments
 (0)