@@ -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+
108156func 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