github.com/google/go-github/v74@v74.0.0/github/enterprise_actions_runners_test.go (about)

     1  // Copyright 2020 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"encoding/json"
    11  	"fmt"
    12  	"net/http"
    13  	"testing"
    14  	"time"
    15  
    16  	"github.com/google/go-cmp/cmp"
    17  )
    18  
    19  func TestEnterpriseService_GenerateEnterpriseJITConfig(t *testing.T) {
    20  	t.Parallel()
    21  	client, mux, _ := setup(t)
    22  
    23  	input := &GenerateJITConfigRequest{Name: "test", RunnerGroupID: 1, Labels: []string{"one", "two"}}
    24  
    25  	mux.HandleFunc("/enterprises/o/actions/runners/generate-jitconfig", func(w http.ResponseWriter, r *http.Request) {
    26  		v := new(GenerateJITConfigRequest)
    27  		assertNilError(t, json.NewDecoder(r.Body).Decode(v))
    28  
    29  		testMethod(t, r, "POST")
    30  		if !cmp.Equal(v, input) {
    31  			t.Errorf("Request body = %+v, want %+v", v, input)
    32  		}
    33  
    34  		fmt.Fprint(w, `{"encoded_jit_config":"foo"}`)
    35  	})
    36  
    37  	ctx := context.Background()
    38  	jitConfig, _, err := client.Enterprise.GenerateEnterpriseJITConfig(ctx, "o", input)
    39  	if err != nil {
    40  		t.Errorf("Enterprise.GenerateEnterpriseJITConfig returned error: %v", err)
    41  	}
    42  
    43  	want := &JITRunnerConfig{EncodedJITConfig: Ptr("foo")}
    44  	if !cmp.Equal(jitConfig, want) {
    45  		t.Errorf("Enterprise.GenerateEnterpriseJITConfig returned %+v, want %+v", jitConfig, want)
    46  	}
    47  
    48  	const methodName = "GenerateEnterpriseJITConfig"
    49  	testBadOptions(t, methodName, func() (err error) {
    50  		_, _, err = client.Enterprise.GenerateEnterpriseJITConfig(ctx, "\n", input)
    51  		return err
    52  	})
    53  
    54  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    55  		got, resp, err := client.Enterprise.GenerateEnterpriseJITConfig(ctx, "o", input)
    56  		if got != nil {
    57  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    58  		}
    59  		return resp, err
    60  	})
    61  }
    62  
    63  func TestEnterpriseService_CreateRegistrationToken(t *testing.T) {
    64  	t.Parallel()
    65  	client, mux, _ := setup(t)
    66  
    67  	mux.HandleFunc("/enterprises/e/actions/runners/registration-token", func(w http.ResponseWriter, r *http.Request) {
    68  		testMethod(t, r, "POST")
    69  		fmt.Fprint(w, `{"token":"LLBF3JGZDX3P5PMEXLND6TS6FCWO6","expires_at":"2020-01-22T12:13:35.123Z"}`)
    70  	})
    71  
    72  	ctx := context.Background()
    73  	token, _, err := client.Enterprise.CreateRegistrationToken(ctx, "e")
    74  	if err != nil {
    75  		t.Errorf("Enterprise.CreateRegistrationToken returned error: %v", err)
    76  	}
    77  
    78  	want := &RegistrationToken{Token: Ptr("LLBF3JGZDX3P5PMEXLND6TS6FCWO6"),
    79  		ExpiresAt: &Timestamp{time.Date(2020, time.January, 22, 12, 13, 35,
    80  			123000000, time.UTC)}}
    81  	if !cmp.Equal(token, want) {
    82  		t.Errorf("Enterprise.CreateRegistrationToken returned %+v, want %+v", token, want)
    83  	}
    84  
    85  	const methodName = "CreateRegistrationToken"
    86  	testBadOptions(t, methodName, func() (err error) {
    87  		_, _, err = client.Enterprise.CreateRegistrationToken(ctx, "\n")
    88  		return err
    89  	})
    90  
    91  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    92  		got, resp, err := client.Enterprise.CreateRegistrationToken(ctx, "e")
    93  		if got != nil {
    94  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    95  		}
    96  		return resp, err
    97  	})
    98  }
    99  
   100  func TestEnterpriseService_ListRunners(t *testing.T) {
   101  	t.Parallel()
   102  	client, mux, _ := setup(t)
   103  
   104  	mux.HandleFunc("/enterprises/e/actions/runners", func(w http.ResponseWriter, r *http.Request) {
   105  		testMethod(t, r, "GET")
   106  		testFormValues(t, r, values{"name": "MBP", "per_page": "2", "page": "2"})
   107  		fmt.Fprint(w, `{"total_count":1,"runners":[{"id":23,"name":"MBP","os":"macos","status":"online"}]}`)
   108  	})
   109  
   110  	opts := &ListRunnersOptions{
   111  		Name:        Ptr("MBP"),
   112  		ListOptions: ListOptions{Page: 2, PerPage: 2},
   113  	}
   114  	ctx := context.Background()
   115  	runners, _, err := client.Enterprise.ListRunners(ctx, "e", opts)
   116  	if err != nil {
   117  		t.Errorf("Enterprise.ListRunners returned error: %v", err)
   118  	}
   119  
   120  	want := &Runners{
   121  		TotalCount: 1,
   122  		Runners: []*Runner{
   123  			{ID: Ptr(int64(23)), Name: Ptr("MBP"), OS: Ptr("macos"), Status: Ptr("online")},
   124  		},
   125  	}
   126  	if !cmp.Equal(runners, want) {
   127  		t.Errorf("Actions.ListRunners returned %+v, want %+v", runners, want)
   128  	}
   129  
   130  	const methodName = "ListRunners"
   131  	testBadOptions(t, methodName, func() (err error) {
   132  		_, _, err = client.Enterprise.ListRunners(ctx, "\n", &ListRunnersOptions{})
   133  		return err
   134  	})
   135  
   136  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   137  		got, resp, err := client.Enterprise.ListRunners(ctx, "e", nil)
   138  		if got != nil {
   139  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   140  		}
   141  		return resp, err
   142  	})
   143  }
   144  
   145  func TestEnterpriseService_GetRunner(t *testing.T) {
   146  	t.Parallel()
   147  	client, mux, _ := setup(t)
   148  
   149  	mux.HandleFunc("/enterprises/e/actions/runners/23", func(w http.ResponseWriter, r *http.Request) {
   150  		testMethod(t, r, "GET")
   151  		fmt.Fprint(w, `{"id":23,"name":"MBP","os":"macos","status":"online"}`)
   152  	})
   153  
   154  	ctx := context.Background()
   155  	runner, _, err := client.Enterprise.GetRunner(ctx, "e", 23)
   156  	if err != nil {
   157  		t.Errorf("Enterprise.GetRunner returned error: %v", err)
   158  	}
   159  
   160  	want := &Runner{
   161  		ID:     Ptr(int64(23)),
   162  		Name:   Ptr("MBP"),
   163  		OS:     Ptr("macos"),
   164  		Status: Ptr("online"),
   165  	}
   166  	if !cmp.Equal(runner, want) {
   167  		t.Errorf("Enterprise.GetRunner returned %+v, want %+v", runner, want)
   168  	}
   169  
   170  	const methodName = "GetRunner"
   171  	testBadOptions(t, methodName, func() (err error) {
   172  		_, _, err = client.Enterprise.GetRunner(ctx, "\n", 23)
   173  		return err
   174  	})
   175  
   176  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   177  		got, resp, err := client.Enterprise.GetRunner(ctx, "e", 23)
   178  		if got != nil {
   179  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   180  		}
   181  		return resp, err
   182  	})
   183  }
   184  
   185  func TestEnterpriseService_RemoveRunner(t *testing.T) {
   186  	t.Parallel()
   187  	client, mux, _ := setup(t)
   188  
   189  	mux.HandleFunc("/enterprises/o/actions/runners/21", func(_ http.ResponseWriter, r *http.Request) {
   190  		testMethod(t, r, "DELETE")
   191  	})
   192  
   193  	ctx := context.Background()
   194  	_, err := client.Enterprise.RemoveRunner(ctx, "o", 21)
   195  	if err != nil {
   196  		t.Errorf("Actions.RemoveRunner returned error: %v", err)
   197  	}
   198  
   199  	const methodName = "RemoveRunner"
   200  	testBadOptions(t, methodName, func() (err error) {
   201  		_, err = client.Enterprise.RemoveRunner(ctx, "\n", 21)
   202  		return err
   203  	})
   204  
   205  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   206  		return client.Enterprise.RemoveRunner(ctx, "o", 21)
   207  	})
   208  }
   209  
   210  func TestEnterpriseService_ListRunnerApplicationDownloads(t *testing.T) {
   211  	t.Parallel()
   212  	client, mux, _ := setup(t)
   213  
   214  	mux.HandleFunc("/enterprises/o/actions/runners/downloads", func(w http.ResponseWriter, r *http.Request) {
   215  		testMethod(t, r, "GET")
   216  		fmt.Fprint(w, `[{"os":"osx","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-osx-x64-2.164.0.tar.gz","filename":"actions-runner-osx-x64-2.164.0.tar.gz"},{"os":"linux","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-x64-2.164.0.tar.gz","filename":"actions-runner-linux-x64-2.164.0.tar.gz"},{"os": "linux","architecture":"arm","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm-2.164.0.tar.gz","filename":"actions-runner-linux-arm-2.164.0.tar.gz"},{"os":"win","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-win-x64-2.164.0.zip","filename":"actions-runner-win-x64-2.164.0.zip"},{"os":"linux","architecture":"arm64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm64-2.164.0.tar.gz","filename":"actions-runner-linux-arm64-2.164.0.tar.gz"}]`)
   217  	})
   218  
   219  	ctx := context.Background()
   220  	downloads, _, err := client.Enterprise.ListRunnerApplicationDownloads(ctx, "o")
   221  	if err != nil {
   222  		t.Errorf("Enterprise.ListRunnerApplicationDownloads returned error: %v", err)
   223  	}
   224  
   225  	want := []*RunnerApplicationDownload{
   226  		{OS: Ptr("osx"), Architecture: Ptr("x64"), DownloadURL: Ptr("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-osx-x64-2.164.0.tar.gz"), Filename: Ptr("actions-runner-osx-x64-2.164.0.tar.gz")},
   227  		{OS: Ptr("linux"), Architecture: Ptr("x64"), DownloadURL: Ptr("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-x64-2.164.0.tar.gz"), Filename: Ptr("actions-runner-linux-x64-2.164.0.tar.gz")},
   228  		{OS: Ptr("linux"), Architecture: Ptr("arm"), DownloadURL: Ptr("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm-2.164.0.tar.gz"), Filename: Ptr("actions-runner-linux-arm-2.164.0.tar.gz")},
   229  		{OS: Ptr("win"), Architecture: Ptr("x64"), DownloadURL: Ptr("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-win-x64-2.164.0.zip"), Filename: Ptr("actions-runner-win-x64-2.164.0.zip")},
   230  		{OS: Ptr("linux"), Architecture: Ptr("arm64"), DownloadURL: Ptr("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm64-2.164.0.tar.gz"), Filename: Ptr("actions-runner-linux-arm64-2.164.0.tar.gz")},
   231  	}
   232  	if !cmp.Equal(downloads, want) {
   233  		t.Errorf("Enterprise.ListRunnerApplicationDownloads returned %+v, want %+v", downloads, want)
   234  	}
   235  
   236  	const methodName = "ListRunnerApplicationDownloads"
   237  	testBadOptions(t, methodName, func() (err error) {
   238  		_, _, err = client.Enterprise.ListRunnerApplicationDownloads(ctx, "\n")
   239  		return err
   240  	})
   241  
   242  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   243  		got, resp, err := client.Enterprise.ListRunnerApplicationDownloads(ctx, "o")
   244  		if got != nil {
   245  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   246  		}
   247  		return resp, err
   248  	})
   249  }