package devops import ( "reflect" "testing" ) func Test_NoScmPipelineConfig(t *testing.T) { inputs := []*NoScmPipeline{ &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", }, &NoScmPipeline{ Name: "", Description: "", Jenkinsfile: "node{echo 'hello'}", }, &NoScmPipeline{ Name: "", Description: "", Jenkinsfile: "node{echo 'hello'}", DisableConcurrent: true, }, } for _, input := range inputs { outputString, err := createPipelineConfigXml(input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parsePipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_NoScmPipelineConfig_Discarder(t *testing.T) { inputs := []*NoScmPipeline{ &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", Discarder: &DiscarderProperty{ "3", "5", }, }, &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", Discarder: &DiscarderProperty{ "3", "", }, }, &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", Discarder: &DiscarderProperty{ "", "21321", }, }, &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", Discarder: &DiscarderProperty{ "", "", }, }, } for _, input := range inputs { outputString, err := createPipelineConfigXml(input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parsePipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_NoScmPipelineConfig_Param(t *testing.T) { inputs := []*NoScmPipeline{ &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", Parameters: []*Parameter{ &Parameter{ Name: "d", DefaultValue: "a\nb", Type: "choice", Description: "fortest", }, }, }, &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", Parameters: []*Parameter{ &Parameter{ Name: "a", DefaultValue: "abc", Type: "string", Description: "fortest", }, &Parameter{ Name: "b", DefaultValue: "false", Type: "boolean", Description: "fortest", }, &Parameter{ Name: "c", DefaultValue: "password \n aaa", Type: "text", Description: "fortest", }, &Parameter{ Name: "d", DefaultValue: "a\nb", Type: "choice", Description: "fortest", }, }, }, } for _, input := range inputs { outputString, err := createPipelineConfigXml(input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parsePipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_NoScmPipelineConfig_Trigger(t *testing.T) { inputs := []*NoScmPipeline{ &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", TimerTrigger: &TimerTrigger{ Cron: "1 1 1 * * *", }, }, &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", RemoteTrigger: &RemoteTrigger{ Token: "abc", }, }, &NoScmPipeline{ Name: "", Description: "for test", Jenkinsfile: "node{echo 'hello'}", TimerTrigger: &TimerTrigger{ Cron: "1 1 1 * * *", }, RemoteTrigger: &RemoteTrigger{ Token: "abc", }, }, } for _, input := range inputs { outputString, err := createPipelineConfigXml(input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parsePipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_MultiBranchPipelineConfig(t *testing.T) { inputs := []*MultiBranchPipeline{ &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "git", GitSource: &GitSource{}, }, &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "github", GitHubSource: &GithubSource{}, }, &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "single_svn", SingleSvnSource: &SingleSvnSource{}, }, &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "svn", SvnSource: &SvnSource{}, }, } for _, input := range inputs { outputString, err := createMultiBranchPipelineConfigXml("", input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parseMultiBranchPipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_MultiBranchPipelineConfig_Discarder(t *testing.T) { inputs := []*MultiBranchPipeline{ &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "git", Discarder: &DiscarderProperty{ DaysToKeep: "1", NumToKeep: "2", }, GitSource: &GitSource{}, }, } for _, input := range inputs { outputString, err := createMultiBranchPipelineConfigXml("", input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parseMultiBranchPipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_MultiBranchPipelineConfig_TimerTrigger(t *testing.T) { inputs := []*MultiBranchPipeline{ &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "git", TimerTrigger: &TimerTrigger{ Interval: "12345566", }, GitSource: &GitSource{}, }, } for _, input := range inputs { outputString, err := createMultiBranchPipelineConfigXml("", input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parseMultiBranchPipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_MultiBranchPipelineConfig_Source(t *testing.T) { inputs := []*MultiBranchPipeline{ &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "git", TimerTrigger: &TimerTrigger{ Interval: "12345566", }, GitSource: &GitSource{ Url: "https://github.com/kubesphere/devops", CredentialId: "git", DiscoverBranches: true, }, }, &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "github", TimerTrigger: &TimerTrigger{ Interval: "12345566", }, GitHubSource: &GithubSource{ Owner: "kubesphere", Repo: "devops", CredentialId: "github", ApiUri: "https://api.github.com", DiscoverBranches: 1, DiscoverPRFromOrigin: 2, DiscoverPRFromForks: &GithubDiscoverPRFromForks{ Strategy: 1, Trust: 1, }, }, }, &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "svn", TimerTrigger: &TimerTrigger{ Interval: "12345566", }, SvnSource: &SvnSource{ Remote: "https://api.svn.com/bcd", CredentialId: "svn", Excludes: "truck", Includes: "tag/*", }, }, &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "single_svn", TimerTrigger: &TimerTrigger{ Interval: "12345566", }, SingleSvnSource: &SingleSvnSource{ Remote: "https://api.svn.com/bcd", CredentialId: "svn", }, }, } for _, input := range inputs { outputString, err := createMultiBranchPipelineConfigXml("", input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parseMultiBranchPipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_MultiBranchPipelineCloneConfig(t *testing.T) { inputs := []*MultiBranchPipeline{ &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "git", GitSource: &GitSource{ Url: "https://github.com/kubesphere/devops", CredentialId: "git", DiscoverBranches: true, CloneOption: &GitCloneOption{ Shallow: false, Depth: 3, Timeout: 20, }, }, }, &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "github", GitHubSource: &GithubSource{ Owner: "kubesphere", Repo: "devops", CredentialId: "github", ApiUri: "https://api.github.com", DiscoverBranches: 1, DiscoverPRFromOrigin: 2, DiscoverPRFromForks: &GithubDiscoverPRFromForks{ Strategy: 1, Trust: 1, }, CloneOption: &GitCloneOption{ Shallow: false, Depth: 3, Timeout: 20, }, }, }, } for _, input := range inputs { outputString, err := createMultiBranchPipelineConfigXml("", input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parseMultiBranchPipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } } func Test_MultiBranchPipelineRegexFilter(t *testing.T) { inputs := []*MultiBranchPipeline{ &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "git", GitSource: &GitSource{ Url: "https://github.com/kubesphere/devops", CredentialId: "git", DiscoverBranches: true, RegexFilter: ".*", }, }, &MultiBranchPipeline{ Name: "", Description: "for test", ScriptPath: "Jenkinsfile", SourceType: "github", GitHubSource: &GithubSource{ Owner: "kubesphere", Repo: "devops", CredentialId: "github", ApiUri: "https://api.github.com", DiscoverBranches: 1, DiscoverPRFromOrigin: 2, DiscoverPRFromForks: &GithubDiscoverPRFromForks{ Strategy: 1, Trust: 1, }, RegexFilter: ".*", }, }, } for _, input := range inputs { outputString, err := createMultiBranchPipelineConfigXml("", input) if err != nil { t.Fatalf("should not get error %+v", err) } output, err := parseMultiBranchPipelineConfigXml(outputString) if err != nil { t.Fatalf("should not get error %+v", err) } if !reflect.DeepEqual(input, output) { t.Fatalf("input [%+v] output [%+v] should equal ", input, output) } } }