@@ -18,6 +18,7 @@ import (
18
18
"github.com/jfrog/jfrog-cli-core/v2/common/spec"
19
19
"github.com/jfrog/jfrog-client-go/utils/log"
20
20
21
+ rtBuildInfo "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/buildinfo"
21
22
"github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/generic"
22
23
"github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
23
24
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
@@ -267,6 +268,17 @@ func TestBuildPublishDryRun(t *testing.T) {
267
268
buildInfo := publishedBuildInfo .BuildInfo
268
269
validateBuildInfo (buildInfo , t , 0 , 9 , tests .RtBuildName1 , buildinfo .Generic )
269
270
271
+ inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , tests .RtBuildName1 , artHttpDetails )
272
+ // Verify build publish info overwrite flag with dryrun
273
+ for i := 0 ; i < 2 ; i ++ {
274
+ runRt (t , "bp" , tests .RtBuildName1 , buildNumber )
275
+ }
276
+ existingBuildInfo , found , err := tests .GetBuildRuns (serverDetails , tests .RtBuildName1 )
277
+ assertBuildNumberOccurrencesForGivenBuildNameAndNumber (t , existingBuildInfo , 2 , found , buildNumber , err )
278
+ runRt (t , "bp" , tests .RtBuildName1 , buildNumber , "--dry-run=true" , "--overwrite=true" )
279
+ // Expect no changes in the build info since it's a dry run
280
+ assertBuildNumberOccurrencesForGivenBuildNameAndNumber (t , existingBuildInfo , 2 , found , buildNumber , err )
281
+
270
282
inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , tests .RtBuildName1 , artHttpDetails )
271
283
cleanArtifactoryTest ()
272
284
}
@@ -517,7 +529,9 @@ func testArtifactoryPublishWithoutBuildUrl(t *testing.T, buildName, buildNumber
517
529
func TestArtifactoryPublishBuildInfoBuildUrl (t * testing.T ) {
518
530
initArtifactoryTest (t , "" )
519
531
buildNumber := "11"
532
+ // jfrog-ignore - false positive not a real URL.
520
533
buildUrl := "http://example.ci.com"
534
+ // jfrog-ignore - false positive not a real URL.
521
535
setEnvCallBack := clientTestUtils .SetEnvWithCallbackAndAssert (t , cliutils .BuildUrl , "http://override-me.ci.com" )
522
536
defer setEnvCallBack ()
523
537
inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , tests .RtBuildName1 , artHttpDetails )
@@ -538,6 +552,7 @@ func TestArtifactoryPublishBuildInfoBuildUrl(t *testing.T) {
538
552
func TestArtifactoryPublishBuildInfoBuildUrlFromEnv (t * testing.T ) {
539
553
initArtifactoryTest (t , "" )
540
554
buildNumber := "11"
555
+ // jfrog-ignore - false positive not a real URL.
541
556
buildUrl := "http://example-env.ci.com"
542
557
inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , tests .RtBuildName1 , artHttpDetails )
543
558
setEnvCallBack := clientTestUtils .SetEnvWithCallbackAndAssert (t , cliutils .BuildUrl , buildUrl )
@@ -658,6 +673,80 @@ func TestBuildAddGitEnvBuildNameAndNumber(t *testing.T) {
658
673
testBuildAddGit (t , true )
659
674
}
660
675
676
+ func TestBuildPublishWithOverwrite (t * testing.T ) {
677
+ initArtifactoryTest (t , "" )
678
+ buildName := tests .RtBuildName1
679
+ buildNumber := "1"
680
+ preReleaseBuildNumber := "1-rc"
681
+ defaultNumberOfBuilds := 5
682
+
683
+ // Clean old build tests if exists
684
+ inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , buildName , artHttpDetails )
685
+
686
+ // Publish build info without overwrite flag
687
+ for i := 0 ; i < defaultNumberOfBuilds ; i ++ {
688
+ runRt (t , "bp" , buildName , buildNumber )
689
+ }
690
+ for i := 0 ; i < 2 ; i ++ {
691
+ runRt (t , "bp" , buildName , preReleaseBuildNumber )
692
+ }
693
+ publishedBuildInfo , found , err := tests .GetBuildRuns (serverDetails , buildName )
694
+ assertNoErrorAndAssertBuildInfoFound (t , err , found )
695
+ // Verify if total of 7 build info's are available
696
+ assert .Equal (t , 7 , len (publishedBuildInfo .BuildsNumbers ), "expected five build info's to be available" )
697
+
698
+ buildNumberFrequency := rtBuildInfo .CalculateBuildNumberFrequency (publishedBuildInfo )
699
+ // Verify if 5 build info's are available for given build number and 2 for pre-release build number
700
+ assert .Equal (t , defaultNumberOfBuilds , buildNumberFrequency [buildNumber ])
701
+ assert .Equal (t , 2 , buildNumberFrequency [preReleaseBuildNumber ])
702
+
703
+ // Publish build info with overwrite flag
704
+ runRt (t , "bp" , buildName , buildNumber , "--overwrite=true" )
705
+ publishedBuildInfo , found , err = tests .GetBuildRuns (serverDetails , buildName )
706
+ assertNoErrorAndAssertBuildInfoFound (t , err , found )
707
+ buildNumbersFrequencyAfterOverwrite := rtBuildInfo .CalculateBuildNumberFrequency (publishedBuildInfo )
708
+ // Since overwrite is ran for buildNumber verify if only one build info is available for given build number
709
+ assert .Equal (t , 1 , buildNumbersFrequencyAfterOverwrite [buildNumber ])
710
+ // Since overwrite is ran for buildNumber verify no change for preReleaseBuildNumber
711
+ assert .Equal (t , 2 , buildNumbersFrequencyAfterOverwrite [preReleaseBuildNumber ])
712
+
713
+ // Verify that only one build info is available for given build number with overwrite
714
+ runRt (t , "bp" , buildName , preReleaseBuildNumber , "--overwrite=true" )
715
+ publishedBuildInfo , found , err = tests .GetBuildRuns (serverDetails , buildName )
716
+ assertNoErrorAndAssertBuildInfoFound (t , err , found )
717
+ buildNumbersFrequencyAfterOverwrite = rtBuildInfo .CalculateBuildNumberFrequency (publishedBuildInfo )
718
+ // Since overwrite is ran for preReleaseBuildNumber verify no change for buildNumber
719
+ assert .Equal (t , 1 , buildNumbersFrequencyAfterOverwrite [buildNumber ], "expected only one build info to be available" )
720
+ // Since overwrite is ran for preReleaseBuildNumber verify if only one build info is available for given preReleaseBuildNumber
721
+ assert .Equal (t , 1 , buildNumbersFrequencyAfterOverwrite [preReleaseBuildNumber ])
722
+
723
+ // Delete existing build info
724
+ inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , buildName , artHttpDetails )
725
+
726
+ // Run build-publish with overwrite flag and build should be published
727
+ runRt (t , "bp" , buildName , buildNumber , "--overwrite=true" )
728
+ publishedBuildInfo , found , err = tests .GetBuildRuns (serverDetails , buildName )
729
+ // Verify even though overwrite is used when no build infos are available build info should be published
730
+ assertBuildNumberOccurrencesForGivenBuildNameAndNumber (t , publishedBuildInfo , 1 , found , buildNumber , err )
731
+
732
+ // Cleanup
733
+ inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , buildName , artHttpDetails )
734
+ cleanArtifactoryTest ()
735
+ }
736
+
737
+ func assertBuildNumberOccurrencesForGivenBuildNameAndNumber (t * testing.T , existingBuildInfo * buildinfo.BuildRuns ,
738
+ expectedOccurrences int , found bool , buildNumber string , err error ) {
739
+
740
+ buildNumbersFrequencyAfterOverwrite := rtBuildInfo .CalculateBuildNumberFrequency (existingBuildInfo )
741
+ assertNoErrorAndAssertBuildInfoFound (t , err , found )
742
+ assert .Equal (t , expectedOccurrences , buildNumbersFrequencyAfterOverwrite [buildNumber ], "expected only one build info to be available" )
743
+ }
744
+
745
+ func assertNoErrorAndAssertBuildInfoFound (t * testing.T , err error , found bool ) {
746
+ assert .NoError (t , err )
747
+ assert .True (t , found , "build info was expected to be found" )
748
+ }
749
+
661
750
func testBuildAddGit (t * testing.T , useEnvBuildNameAndNumber bool ) {
662
751
initArtifactoryTest (t , "" )
663
752
gitCollectCliRunner := coretests .NewJfrogCli (execMain , "jfrog rt" , "" )
0 commit comments