mirror of
https://github.com/Kichiyaki/terraform-provider-woodpecker.git
synced 2024-06-26 14:27:41 +00:00
feat: test also whether the provider works with Forgejo & Woodpecker
This commit is contained in:
parent
e925cb39d9
commit
b881a7ac23
|
@ -1,4 +1,4 @@
|
|||
name: Test
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
|
@ -12,7 +12,7 @@ permissions:
|
|||
contents: read
|
||||
|
||||
jobs:
|
||||
test:
|
||||
ci:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
dind:
|
||||
|
@ -31,4 +31,13 @@ jobs:
|
|||
- uses: golangci/golangci-lint-action@v3
|
||||
with:
|
||||
version: v1.54
|
||||
- run: go test -race -coverprofile=coverage.txt -covermode=atomic ./...
|
||||
- name: Gitea 1.20 & Woodpecker 1.0
|
||||
run: go test -race -coverprofile=coverage.txt -covermode=atomic ./...
|
||||
env:
|
||||
GITEA_IMAGE: gitea/gitea:1.20
|
||||
WOODPECKER_IMAGE: woodpeckerci/woodpecker-server:v1.0
|
||||
- name: Forgejo 1.20 & Woodpecker 1.0
|
||||
run: go test -race -coverprofile=coverage.txt -covermode=atomic ./...
|
||||
env:
|
||||
GITEA_IMAGE: codeberg.org/forgejo/forgejo:1.20
|
||||
WOODPECKER_IMAGE: woodpeckerci/woodpecker-server:v1.0
|
|
@ -26,8 +26,6 @@ import (
|
|||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
const resourceExpInSec = 120
|
||||
|
||||
var (
|
||||
giteaClient *gitea.Client
|
||||
woodpeckerClient woodpecker.Client
|
||||
|
@ -55,13 +53,13 @@ func TestMain(m *testing.M) {
|
|||
_ = resourceWoodpecker.Close()
|
||||
})
|
||||
|
||||
woodpeckerClient = newWoodpeckerClient(resourceWoodpecker.httpURL, resourceWoodpecker.token)
|
||||
|
||||
// set required envs
|
||||
_ = os.Setenv("TF_ACC", "1")
|
||||
_ = os.Setenv("WOODPECKER_SERVER", resourceWoodpecker.httpURL.String())
|
||||
_ = os.Setenv("WOODPECKER_TOKEN", resourceWoodpecker.token)
|
||||
|
||||
woodpeckerClient = newWoodpeckerClient(resourceWoodpecker.httpURL, resourceWoodpecker.token)
|
||||
|
||||
code := m.Run()
|
||||
|
||||
// LIFO
|
||||
|
@ -94,6 +92,8 @@ func newDockerNetwork(pool *dockertest.Pool) *dockertest.Network {
|
|||
return network
|
||||
}
|
||||
|
||||
const giteaContainerExpInSec = 120
|
||||
|
||||
type giteaResource struct {
|
||||
docker *dockertest.Resource
|
||||
httpURL *urlpkg.URL
|
||||
|
@ -102,9 +102,10 @@ type giteaResource struct {
|
|||
}
|
||||
|
||||
func runGitea(pool *dockertest.Pool, network *dockertest.Network) giteaResource {
|
||||
repo, tag := getGiteaRepoTag()
|
||||
gitea, err := pool.RunWithOptions(&dockertest.RunOptions{
|
||||
Repository: "gitea/gitea",
|
||||
Tag: "1.20",
|
||||
Repository: repo,
|
||||
Tag: tag,
|
||||
Networks: []*dockertest.Network{network},
|
||||
Env: []string{
|
||||
"GITEA__security__INSTALL_LOCK=true",
|
||||
|
@ -119,7 +120,7 @@ func runGitea(pool *dockertest.Pool, network *dockertest.Network) giteaResource
|
|||
log.Fatalf("couldn't run gitea: %s", err)
|
||||
}
|
||||
|
||||
if err = gitea.Expire(resourceExpInSec); err != nil {
|
||||
if err = gitea.Expire(giteaContainerExpInSec); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -171,6 +172,16 @@ func (r giteaResource) Close() error {
|
|||
return r.docker.Close()
|
||||
}
|
||||
|
||||
const defaultGiteaImage = "gitea/gitea:1.20"
|
||||
|
||||
func getGiteaRepoTag() (string, string) {
|
||||
val := os.Getenv("GITEA_IMAGE")
|
||||
if val == "" {
|
||||
val = defaultGiteaImage
|
||||
}
|
||||
return docker.ParseRepositoryTag(val)
|
||||
}
|
||||
|
||||
func createGiteaUser(pool *dockertest.Pool, gitea *dockertest.Resource) *urlpkg.Userinfo {
|
||||
username := strings.ReplaceAll(uuid.NewString(), "-", "")
|
||||
password := uuid.NewString()
|
||||
|
@ -224,6 +235,8 @@ type woodpeckerResource struct {
|
|||
token string
|
||||
}
|
||||
|
||||
const woodpeckerContainerExpInSec = 120
|
||||
|
||||
func runWoodpecker(
|
||||
pool *dockertest.Pool,
|
||||
network *dockertest.Network,
|
||||
|
@ -245,9 +258,10 @@ func runWoodpecker(
|
|||
log.Fatalln("couldn't create oauth2 app:", err)
|
||||
}
|
||||
|
||||
repo, tag := getWoodpeckerRepoTag()
|
||||
woodpecker, err := pool.RunWithOptions(&dockertest.RunOptions{
|
||||
Repository: "woodpeckerci/woodpecker-server",
|
||||
Tag: "v1.0.2",
|
||||
Repository: repo,
|
||||
Tag: tag,
|
||||
Networks: []*dockertest.Network{network},
|
||||
PortBindings: map[docker.Port][]docker.PortBinding{
|
||||
"8000/tcp": {
|
||||
|
@ -281,7 +295,7 @@ func runWoodpecker(
|
|||
log.Fatalf("couldn't run woodpecker: %s", err)
|
||||
}
|
||||
|
||||
if err = woodpecker.Expire(resourceExpInSec); err != nil {
|
||||
if err = woodpecker.Expire(woodpeckerContainerExpInSec); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -324,6 +338,16 @@ func (r woodpeckerResource) Close() error {
|
|||
return r.docker.Close()
|
||||
}
|
||||
|
||||
const defaultWoodpeckerImage = "woodpeckerci/woodpecker-server:v1.0.2"
|
||||
|
||||
func getWoodpeckerRepoTag() (string, string) {
|
||||
val := os.Getenv("WOODPECKER_IMAGE")
|
||||
if val == "" {
|
||||
val = defaultWoodpeckerImage
|
||||
}
|
||||
return docker.ParseRepositoryTag(val)
|
||||
}
|
||||
|
||||
type woodpeckerTokenProvider struct {
|
||||
client *http.Client
|
||||
oauthApp *gitea.Oauth2
|
||||
|
@ -444,7 +468,9 @@ func (p woodpeckerTokenProvider) do(req *http.Request) *http.Response {
|
|||
log.Fatalf("request to %s failed: %s", req.URL.String(), err)
|
||||
}
|
||||
if resp.StatusCode/100 != 2 { // accept only 2XX requests
|
||||
log.Fatalf("request to %s failed", req.URL.String())
|
||||
b, _ := io.ReadAll(resp.Body)
|
||||
_ = resp.Body.Close()
|
||||
log.Fatalf("request to %s failed (status code = %d): %s", req.URL.String(), resp.StatusCode, b)
|
||||
}
|
||||
|
||||
return resp
|
||||
|
@ -461,7 +487,7 @@ func (p woodpeckerTokenProvider) getCSRFTokenFromCookies(cookies []*http.Cookie)
|
|||
|
||||
func (p woodpeckerTokenProvider) readCSRFTokenFromWoodpeckerWebConfig(r io.Reader) string {
|
||||
defer func() {
|
||||
// discard the remaining bytes
|
||||
// discard remaining bytes
|
||||
_, _ = io.Copy(io.Discard, r)
|
||||
}()
|
||||
|
||||
|
|
|
@ -64,12 +64,12 @@ func (p *woodpeckerProvider) Resources(_ context.Context) []func() resource.Reso
|
|||
}
|
||||
|
||||
func (p *woodpeckerProvider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
|
||||
cfg := p.createProviderConfiguration(ctx, req, resp)
|
||||
cfg := newProviderConfig(ctx, req, resp)
|
||||
if resp.Diagnostics.HasError() {
|
||||
return
|
||||
}
|
||||
|
||||
p.client = p.createClient(ctx, cfg, resp)
|
||||
p.client = newClient(ctx, cfg, resp)
|
||||
|
||||
resp.DataSourceData = p.client
|
||||
resp.ResourceData = p.client
|
||||
|
@ -80,7 +80,7 @@ type providerConfig struct {
|
|||
Token types.String `tfsdk:"token"`
|
||||
}
|
||||
|
||||
func (p *woodpeckerProvider) createProviderConfiguration(
|
||||
func newProviderConfig(
|
||||
ctx context.Context,
|
||||
req provider.ConfigureRequest,
|
||||
resp *provider.ConfigureResponse,
|
||||
|
@ -120,7 +120,7 @@ func (p *woodpeckerProvider) createProviderConfiguration(
|
|||
return config
|
||||
}
|
||||
|
||||
func (p *woodpeckerProvider) createClient(
|
||||
func newClient(
|
||||
ctx context.Context,
|
||||
config providerConfig,
|
||||
resp *provider.ConfigureResponse,
|
||||
|
|
|
@ -9,12 +9,10 @@ import (
|
|||
"github.com/hashicorp/terraform-plugin-go/tfprotov6"
|
||||
)
|
||||
|
||||
//nolint:unused
|
||||
var testAccProtoV6ProviderFactories = map[string]func() (tfprotov6.ProviderServer, error){
|
||||
"woodpecker": providerserver.NewProtocol6WithError(internal.NewProvider("test")()),
|
||||
}
|
||||
|
||||
//nolint:unused
|
||||
func testAccPreCheck(t *testing.T) {
|
||||
t.Helper()
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user