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 }