github.com/bndr/gojenkins@v1.1.0/jenkins_test.go (about)

     1  package gojenkins
     2  
     3  import (
     4  	"context"
     5  	"io/ioutil"
     6  	"os"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  var (
    14  	jenkins *Jenkins
    15  	queueID int64
    16  )
    17  
    18  func TestInit(t *testing.T) {
    19  	ctx := context.Background()
    20  	jenkins = CreateJenkins(nil, "http://localhost:8080", "admin", "admin")
    21  	_, err := jenkins.Init(ctx)
    22  	assert.Nil(t, err, "Jenkins Initialization should not fail")
    23  }
    24  
    25  func TestCreateJobs(t *testing.T) {
    26  	job1ID := "Job1_test"
    27  	job2ID := "job2_test"
    28  	job_data := getFileAsString("job.xml")
    29  
    30  	ctx := context.Background()
    31  	job1, err := jenkins.CreateJob(ctx, job_data, job1ID)
    32  	assert.Nil(t, err)
    33  	assert.NotNil(t, job1)
    34  	assert.Equal(t, "Some Job Description", job1.GetDescription())
    35  	assert.Equal(t, job1ID, job1.GetName())
    36  
    37  	job2, _ := jenkins.CreateJob(ctx, job_data, job2ID)
    38  	assert.NotNil(t, job2)
    39  	assert.Equal(t, "Some Job Description", job2.GetDescription())
    40  	assert.Equal(t, job2ID, job2.GetName())
    41  }
    42  
    43  func TestCreateNodes(t *testing.T) {
    44  
    45  	id1 := "node1_test"
    46  	//id2 := "node2_test"
    47  	id3 := "node3_test"
    48  	id4 := "node4_test"
    49  
    50  	jnlp := map[string]string{"method": "JNLPLauncher"}
    51  	//ssh := map[string]string{"method": "SSHLauncher"}
    52  
    53  	ctx := context.Background()
    54  	node1, _ := jenkins.CreateNode(ctx, id1, 1, "Node 1 Description", "/var/lib/jenkins", "", jnlp)
    55  	assert.Equal(t, id1, node1.GetName())
    56  
    57  	//node2, _ := jenkins.CreateNode(id2, 1, "Node 2 Description", "/var/lib/jenkins", "jdk8 docker", ssh)
    58  	//assert.Equal(t, id2, node2.GetName())
    59  
    60  	node3, _ := jenkins.CreateNode(ctx, id3, 1, "Node 3 Description", "/var/lib/jenkins", "jdk7")
    61  	assert.Equal(t, id3, node3.GetName())
    62  	node4, _ := jenkins.CreateNode(ctx, id4, 1, "Node 4 Description", "/var/lib/jenkins", "jdk7")
    63  	assert.Equal(t, id4, node4.GetName())
    64  }
    65  
    66  func TestDeleteNodes(t *testing.T) {
    67  	id := "node4_test"
    68  
    69  	ctx := context.Background()
    70  	node, _ := jenkins.DeleteNode(ctx, id)
    71  	assert.NotNil(t, node)
    72  }
    73  
    74  func TestCreateBuilds(t *testing.T) {
    75  	ctx := context.Background()
    76  	jobs, _ := jenkins.GetAllJobs(ctx)
    77  	for _, item := range jobs {
    78  		queueID, _ = item.InvokeSimple(ctx, map[string]string{"params1": "param1"})
    79  		item.Poll(ctx)
    80  		isQueued, _ := item.IsQueued(ctx)
    81  		assert.Equal(t, true, isQueued)
    82  		time.Sleep(10 * time.Second)
    83  		builds, _ := item.GetAllBuildIds(ctx)
    84  
    85  		assert.True(t, (len(builds) > 0))
    86  
    87  	}
    88  }
    89  
    90  func TestGetQueueItem(t *testing.T) {
    91  	ctx := context.Background()
    92  	task, err := jenkins.GetQueueItem(ctx, queueID)
    93  	if err != nil {
    94  		t.Fatal(err)
    95  	}
    96  	if task.Raw == nil || task.Raw.ID != queueID {
    97  		t.Fatal()
    98  	}
    99  }
   100  
   101  func TestParseBuildHistory(t *testing.T) {
   102  	r, err := os.Open("_tests/build_history.txt")
   103  	if err != nil {
   104  		panic(err)
   105  	}
   106  	history := parseBuildHistory(r)
   107  	assert.True(t, len(history) == 3)
   108  }
   109  
   110  func TestCreateViews(t *testing.T) {
   111  	ctx := context.Background()
   112  	list_view, err := jenkins.CreateView(ctx, "test_list_view", LIST_VIEW)
   113  	assert.Nil(t, err)
   114  	assert.Equal(t, "test_list_view", list_view.GetName())
   115  	assert.Equal(t, "", list_view.GetDescription())
   116  	assert.Equal(t, 0, len(list_view.GetJobs()))
   117  
   118  	my_view, err := jenkins.CreateView(ctx, "test_my_view", MY_VIEW)
   119  	assert.Nil(t, err)
   120  	assert.Equal(t, "test_my_view", my_view.GetName())
   121  	assert.Equal(t, "", my_view.GetDescription())
   122  	assert.Equal(t, 2, len(my_view.GetJobs()))
   123  
   124  }
   125  
   126  func TestGetAllJobs(t *testing.T) {
   127  	ctx := context.Background()
   128  	jobs, _ := jenkins.GetAllJobs(ctx)
   129  	assert.Equal(t, 2, len(jobs))
   130  	assert.Equal(t, jobs[0].Raw.Color, "blue")
   131  }
   132  
   133  func TestGetAllNodes(t *testing.T) {
   134  	ctx := context.Background()
   135  	nodes, _ := jenkins.GetAllNodes(ctx)
   136  	assert.Equal(t, 3, len(nodes))
   137  	assert.Equal(t, nodes[0].GetName(), "master")
   138  }
   139  
   140  func TestGetAllBuilds(t *testing.T) {
   141  	ctx := context.Background()
   142  	builds, _ := jenkins.GetAllBuildIds(ctx, "Job1_test")
   143  	for _, b := range builds {
   144  		build, _ := jenkins.GetBuild(ctx, "Job1_test", b.Number)
   145  		assert.Equal(t, "SUCCESS", build.GetResult())
   146  	}
   147  	assert.Equal(t, 1, len(builds))
   148  }
   149  
   150  func TestGetLabel(t *testing.T) {
   151  	ctx := context.Background()
   152  	label, err := jenkins.GetLabel(ctx, "test_label")
   153  	assert.Nil(t, err)
   154  	assert.Equal(t, label.GetName(), "test_label")
   155  	assert.Equal(t, 0, len(label.GetNodes()))
   156  
   157  	label, err = jenkins.GetLabel(ctx, "jdk7")
   158  	assert.Nil(t, err)
   159  	assert.Equal(t, label.GetName(), "jdk7")
   160  	assert.Equal(t, 1, len(label.GetNodes()))
   161  	assert.Equal(t, "node3_test", label.GetNodes()[0].NodeName)
   162  
   163  	//label, err = jenkins.GetLabel("jdk8")
   164  	//assert.Nil(t, err)
   165  	//assert.Equal(t, label.GetName(), "jdk8")
   166  	//assert.Equal(t, 1, len(label.GetNodes()))
   167  	//assert.Equal(t, "node2_test", label.GetNodes()[0].NodeName)
   168  	//
   169  	//label, err = jenkins.GetLabel("docker")
   170  	//assert.Nil(t, err)
   171  	//assert.Equal(t, label.GetName(), "docker")
   172  	//assert.Equal(t, 1, len(label.GetNodes()))
   173  	//assert.Equal(t, "node2_test", label.GetNodes()[0].NodeName)
   174  }
   175  
   176  func TestBuildMethods(t *testing.T) {
   177  	ctx := context.Background()
   178  	job, _ := jenkins.GetJob(ctx, "Job1_test")
   179  	build, _ := job.GetLastBuild(ctx)
   180  	params := build.GetParameters()
   181  	assert.Equal(t, "params1", params[0].Name)
   182  }
   183  
   184  func TestGetSingleJob(t *testing.T) {
   185  	ctx := context.Background()
   186  	job, _ := jenkins.GetJob(ctx, "Job1_test")
   187  	isRunning, _ := job.IsRunning(ctx)
   188  	config, err := job.GetConfig(ctx)
   189  	assert.Nil(t, err)
   190  	assert.Equal(t, false, isRunning)
   191  	assert.Contains(t, config, "<project>")
   192  }
   193  
   194  func TestEnableDisableJob(t *testing.T) {
   195  	ctx := context.Background()
   196  	job, _ := jenkins.GetJob(ctx, "Job1_test")
   197  	result, _ := job.Disable(ctx)
   198  	assert.Equal(t, true, result)
   199  	result, _ = job.Enable(ctx)
   200  	assert.Equal(t, true, result)
   201  }
   202  
   203  func TestCopyDeleteJob(t *testing.T) {
   204  	ctx := context.Background()
   205  	job, _ := jenkins.GetJob(ctx, "Job1_test")
   206  	jobCopy, _ := job.Copy(ctx, "Job1_test_copy")
   207  	assert.Equal(t, jobCopy.GetName(), "Job1_test_copy")
   208  	jobDelete, _ := job.Delete(ctx)
   209  	assert.Equal(t, true, jobDelete)
   210  }
   211  
   212  func TestGetPlugins(t *testing.T) {
   213  	ctx := context.Background()
   214  	plugins, _ := jenkins.GetPlugins(ctx, 3)
   215  	assert.Equal(t, 10, plugins.Count())
   216  }
   217  
   218  func TestGetViews(t *testing.T) {
   219  	ctx := context.Background()
   220  	views, _ := jenkins.GetAllViews(ctx)
   221  	assert.Equal(t, len(views), 3)
   222  	assert.Equal(t, len(views[0].Raw.Jobs), 2)
   223  }
   224  
   225  func TestGetSingleView(t *testing.T) {
   226  	ctx := context.Background()
   227  	view, _ := jenkins.GetView(ctx, "All")
   228  	view2, _ := jenkins.GetView(ctx, "test_list_view")
   229  	assert.Equal(t, len(view.Raw.Jobs), 2)
   230  	assert.Equal(t, len(view2.Raw.Jobs), 0)
   231  	assert.Equal(t, view2.Raw.Name, "test_list_view")
   232  }
   233  
   234  func TestCreateFolder(t *testing.T) {
   235  	ctx := context.Background()
   236  	folder1ID := "folder1_test"
   237  	folder2ID := "folder2_test"
   238  
   239  	folder1, err := jenkins.CreateFolder(ctx, folder1ID)
   240  	assert.Nil(t, err)
   241  	assert.NotNil(t, folder1)
   242  	assert.Equal(t, folder1ID, folder1.GetName())
   243  
   244  	folder2, err := jenkins.CreateFolder(ctx, folder2ID, folder1ID)
   245  	assert.Nil(t, err)
   246  	assert.NotNil(t, folder2)
   247  	assert.Equal(t, folder2ID, folder2.GetName())
   248  }
   249  
   250  func TestCreateJobInFolder(t *testing.T) {
   251  	ctx := context.Background()
   252  	jobName := "Job_test"
   253  	job_data := getFileAsString("job.xml")
   254  
   255  	job1, err := jenkins.CreateJobInFolder(ctx, job_data, jobName, "folder1_test")
   256  	assert.Nil(t, err)
   257  	assert.NotNil(t, job1)
   258  	assert.Equal(t, "Some Job Description", job1.GetDescription())
   259  	assert.Equal(t, jobName, job1.GetName())
   260  
   261  	job2, err := jenkins.CreateJobInFolder(ctx, job_data, jobName, "folder1_test", "folder2_test")
   262  	assert.Nil(t, err)
   263  	assert.NotNil(t, job2)
   264  	assert.Equal(t, "Some Job Description", job2.GetDescription())
   265  	assert.Equal(t, jobName, job2.GetName())
   266  }
   267  
   268  func TestGetFolder(t *testing.T) {
   269  	ctx := context.Background()
   270  	folder1ID := "folder1_test"
   271  	folder2ID := "folder2_test"
   272  
   273  	folder1, err := jenkins.GetFolder(ctx, folder1ID)
   274  	assert.Nil(t, err)
   275  	assert.NotNil(t, folder1)
   276  	assert.Equal(t, folder1ID, folder1.GetName())
   277  
   278  	folder2, err := jenkins.GetFolder(ctx, folder2ID, folder1ID)
   279  	assert.Nil(t, err)
   280  	assert.NotNil(t, folder2)
   281  	assert.Equal(t, folder2ID, folder2.GetName())
   282  }
   283  func TestInstallPlugin(t *testing.T) {
   284  	ctx := context.Background()
   285  
   286  	err := jenkins.InstallPlugin(ctx, "packer", "1.4")
   287  
   288  	assert.Nil(t, err, "Could not install plugin")
   289  }
   290  
   291  func TestConcurrentRequests(t *testing.T) {
   292  	ctx := context.Background()
   293  	for i := 0; i <= 16; i++ {
   294  		go func() {
   295  			jenkins.GetAllJobs(ctx)
   296  			jenkins.GetAllViews(ctx)
   297  			jenkins.GetAllNodes(ctx)
   298  		}()
   299  	}
   300  }
   301  
   302  func getFileAsString(path string) string {
   303  	buf, err := ioutil.ReadFile("_tests/" + path)
   304  	if err != nil {
   305  		panic(err)
   306  	}
   307  
   308  	return string(buf)
   309  }