mirror of
https://code.forgejo.org/actions/ovh-dns-update.git
synced 2024-11-24 12:31:04 -05:00
86ff171ddd
Reviewed-on: https://code.forgejo.org/actions/ovh-dns-update/pulls/1 Co-authored-by: oliverpool <git@olivier.pfad.fr> Co-committed-by: oliverpool <git@olivier.pfad.fr>
98 lines
2.6 KiB
Go
98 lines
2.6 KiB
Go
// SPDX-FileCopyrightText: 2023 Olivier Charvin
|
|
// SPDX-License-Identifier: CC0-1.0
|
|
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/sethvargo/go-githubactions"
|
|
)
|
|
|
|
func TestRun(t *testing.T) {
|
|
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
switch r.URL.Path {
|
|
default:
|
|
msg := fmt.Sprintf("unexpected request on %s", r.URL.Path)
|
|
http.Error(w, msg, http.StatusBadRequest)
|
|
t.Error(msg)
|
|
case "/auth/time":
|
|
case "/domain/zone/FAKEVALUE-INPUT_DOMAIN/record/FAKEVALUE-INPUT_RECORD-ID":
|
|
buf, err := io.ReadAll(r.Body)
|
|
if err != nil {
|
|
msg := fmt.Sprintf("could not read request body: %v", err)
|
|
http.Error(w, msg, http.StatusBadRequest)
|
|
t.Error(msg)
|
|
}
|
|
if string(buf) != `{"subDomain":"FAKEVALUE-INPUT_SUBDOMAIN","target":"\"FAKEVALUE-INPUT_VALUE\""}` {
|
|
msg := fmt.Sprintf("unexpected body: %s", string(buf))
|
|
http.Error(w, msg, http.StatusBadRequest)
|
|
t.Error(msg)
|
|
}
|
|
}
|
|
}))
|
|
t.Cleanup(s.Close)
|
|
action := githubactions.New(githubactions.WithGetenv(func(key string) string {
|
|
switch key {
|
|
case "INPUT_OVH-ENDPOINT":
|
|
return "http://" + s.Listener.Addr().String()
|
|
}
|
|
return "FAKEVALUE-" + key
|
|
}))
|
|
err := run(action)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// for action testing (see .forgejo/workflows/pr.yml)
|
|
if os.Getenv("ACTION_TESTING") == "1" {
|
|
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
switch r.URL.Path {
|
|
default:
|
|
msg := fmt.Sprintf("unexpected request on %s", r.URL.Path)
|
|
http.Error(w, msg, http.StatusBadRequest)
|
|
t.Error(msg)
|
|
return
|
|
case "/auth/time":
|
|
case "/domain/zone/example.org/record/12345":
|
|
var body struct {
|
|
SubDomain string `json:"subDomain"`
|
|
Target string `json:"target"`
|
|
}
|
|
err := json.NewDecoder(r.Body).Decode(&body)
|
|
if err != nil {
|
|
msg := fmt.Sprintf("could not decode request body: %v", err)
|
|
http.Error(w, msg, http.StatusBadRequest)
|
|
t.Error(msg)
|
|
return
|
|
}
|
|
if body.SubDomain != "_release" {
|
|
msg := fmt.Sprintf("unexpected subdomain: %s", body.SubDomain)
|
|
http.Error(w, msg, http.StatusBadRequest)
|
|
t.Error(msg)
|
|
return
|
|
}
|
|
err = os.WriteFile("dns.txt", []byte(body.Target), 0o644)
|
|
if err != nil {
|
|
msg := fmt.Sprintf("could write dns.txt: %v", err)
|
|
http.Error(w, msg, http.StatusInternalServerError)
|
|
t.Error(msg)
|
|
return
|
|
}
|
|
}
|
|
}))
|
|
t.Cleanup(s.Close)
|
|
githubactions.SetOutput("OVH_ENDPOINT", "http://"+s.Listener.Addr().String())
|
|
err = os.Remove("delete_me_when_ready")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
select {}
|
|
}
|
|
}
|