mirror of
https://github.com/cert-manager/webhook-example.git
synced 2025-07-03 23:25:49 +02:00
WIP : response being sent
This commit is contained in:
parent
8623314867
commit
9eacf0b370
5 changed files with 115 additions and 27 deletions
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
|
@ -1,3 +1,4 @@
|
||||||
{
|
{
|
||||||
"go.useLanguageServer": true,
|
"go.useLanguageServer": true,
|
||||||
|
"go.inferGopath": false,
|
||||||
}
|
}
|
2
go.mod
2
go.mod
|
@ -3,7 +3,9 @@ module github.com/gstore/cert-manager-webhook-dynu
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/go-logr/logr v0.2.1
|
||||||
github.com/jetstack/cert-manager v1.0.4
|
github.com/jetstack/cert-manager v1.0.4
|
||||||
|
github.com/miekg/dns v1.1.29
|
||||||
github.com/stretchr/testify v1.6.1
|
github.com/stretchr/testify v1.6.1
|
||||||
gitlab.com/smueller18/cert-manager-webhook-inwx v0.3.0
|
gitlab.com/smueller18/cert-manager-webhook-inwx v0.3.0
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
|
||||||
|
|
33
main_test.go
33
main_test.go
|
@ -11,11 +11,12 @@ import (
|
||||||
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"gitlab.com/smueller18/cert-manager-webhook-inwx/test"
|
//"gitlab.com/smueller18/cert-manager-webhook-inwx/test"
|
||||||
extapi "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
extapi "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
|
||||||
|
|
||||||
"github.com/gstore/cert-manager-webhook-dynu/dynuclient"
|
"github.com/gstore/cert-manager-webhook-dynu/dynuclient"
|
||||||
guntest "github.com/gstore/cert-manager-webhook-dynu/test"
|
guntest "github.com/gstore/cert-manager-webhook-dynu/test"
|
||||||
|
test "github.com/gstore/cert-manager-webhook-dynu/test"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
logf "github.com/jetstack/cert-manager/pkg/logs"
|
logf "github.com/jetstack/cert-manager/pkg/logs"
|
||||||
|
@ -33,7 +34,7 @@ func TestRunsSuite(t *testing.T) {
|
||||||
// The manifest path should contain a file named config.json that is a
|
// The manifest path should contain a file named config.json that is a
|
||||||
// snippet of valid configuration that should be included on the
|
// snippet of valid configuration that should be included on the
|
||||||
// ChallengeRequest passed as part of the test cases.
|
// ChallengeRequest passed as part of the test cases.
|
||||||
|
// t.Skip()
|
||||||
dnsResp := dynuclient.DNSResponse{
|
dnsResp := dynuclient.DNSResponse{
|
||||||
StatusCode: 200,
|
StatusCode: 200,
|
||||||
ID: 98765,
|
ID: 98765,
|
||||||
|
@ -83,18 +84,18 @@ func TestRunsSuite(t *testing.T) {
|
||||||
|
|
||||||
fqdn = "cert-manager-dns01-tests." + zone
|
fqdn = "cert-manager-dns01-tests." + zone
|
||||||
ctx := logf.NewContext(nil, nil, t.Name())
|
ctx := logf.NewContext(nil, nil, t.Name())
|
||||||
|
txtRecs := map[string][][]string{
|
||||||
srv := &server.BasicServer{
|
|
||||||
Handler: &test.Handler{
|
|
||||||
Log: logf.FromContext(ctx, "dnsBasicServerSecret"),
|
|
||||||
TxtRecords: map[string][][]string{
|
|
||||||
fqdn: {
|
fqdn: {
|
||||||
{},
|
{},
|
||||||
{},
|
{},
|
||||||
{"123d=="},
|
{"123d=="},
|
||||||
{"123d=="},
|
{"123d=="},
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
|
srv := &server.BasicServer{
|
||||||
|
Handler: &test.DNSHandler{
|
||||||
|
Log: logf.FromContext(ctx, "dnsBasicServerSecret"),
|
||||||
|
TxtRecords: txtRecs,
|
||||||
Zones: []string{zone},
|
Zones: []string{zone},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -124,7 +125,7 @@ func TestRunsSuite(t *testing.T) {
|
||||||
fixture.RunConformance(t)
|
fixture.RunConformance(t)
|
||||||
}
|
}
|
||||||
func TestRunSuiteWithSecret(t *testing.T) {
|
func TestRunSuiteWithSecret(t *testing.T) {
|
||||||
t.Skip()
|
//t.Skip()
|
||||||
dnsResp := dynuclient.DNSResponse{
|
dnsResp := dynuclient.DNSResponse{
|
||||||
StatusCode: 200,
|
StatusCode: 200,
|
||||||
ID: 98765,
|
ID: 98765,
|
||||||
|
@ -178,17 +179,19 @@ func TestRunSuiteWithSecret(t *testing.T) {
|
||||||
fqdn = "cert-manager-dns01-tests." + zone
|
fqdn = "cert-manager-dns01-tests." + zone
|
||||||
ctx := logf.NewContext(nil, nil, t.Name())
|
ctx := logf.NewContext(nil, nil, t.Name())
|
||||||
|
|
||||||
srv := &server.BasicServer{
|
txtRecs := map[string][][]string{
|
||||||
Handler: &test.Handler{
|
|
||||||
Log: logf.FromContext(ctx, "dnsBasicServerSecret"),
|
|
||||||
TxtRecords: map[string][][]string{
|
|
||||||
fqdn: {
|
fqdn: {
|
||||||
{},
|
{},
|
||||||
{},
|
{},
|
||||||
{"123d=="},
|
{"123d=="},
|
||||||
{"123d=="},
|
{"123d=="},
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
|
|
||||||
|
srv := &server.BasicServer{
|
||||||
|
Handler: &test.DNSHandler{
|
||||||
|
Log: logf.FromContext(ctx, "dnsBasicServerSecret"),
|
||||||
|
TxtRecords: txtRecs,
|
||||||
Zones: []string{zone},
|
Zones: []string{zone},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -210,7 +213,7 @@ func TestRunSuiteWithSecret(t *testing.T) {
|
||||||
dns.SetDNSServer(srv.ListenAddr()),
|
dns.SetDNSServer(srv.ListenAddr()),
|
||||||
dns.SetManifestPath("testdata/secret-dynu-credentials.yaml"),
|
dns.SetManifestPath("testdata/secret-dynu-credentials.yaml"),
|
||||||
dns.SetBinariesPath(kubeBuilderBinPath),
|
dns.SetBinariesPath(kubeBuilderBinPath),
|
||||||
dns.SetPropagationLimit(time.Duration(60)*time.Second),
|
dns.SetPropagationLimit(time.Duration(90)*time.Second),
|
||||||
dns.SetUseAuthoritative(false),
|
dns.SetUseAuthoritative(false),
|
||||||
dns.SetConfig(&extapi.JSON{
|
dns.SetConfig(&extapi.JSON{
|
||||||
Raw: d,
|
Raw: d,
|
||||||
|
|
75
test/dnshandler.go
Normal file
75
test/dnshandler.go
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 The Jetstack cert-manager contributors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/go-logr/logr"
|
||||||
|
"github.com/miekg/dns"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
defaultTTL = 1
|
||||||
|
)
|
||||||
|
|
||||||
|
var requestCount = map[string]int{}
|
||||||
|
var count int = 1
|
||||||
|
|
||||||
|
// DNSHandler ...
|
||||||
|
type DNSHandler struct {
|
||||||
|
Log logr.Logger
|
||||||
|
|
||||||
|
TxtRecords map[string][][]string
|
||||||
|
Zones []string
|
||||||
|
tsigZone string
|
||||||
|
lock sync.Mutex
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServeDNS ... implements github.com/miekg/dns.Handler
|
||||||
|
// Imitates a DNS server
|
||||||
|
func (b *DNSHandler) ServeDNS(w dns.ResponseWriter, req *dns.Msg) {
|
||||||
|
b.lock.Lock()
|
||||||
|
defer b.lock.Unlock()
|
||||||
|
log := b.Log.WithName("serveDNS")
|
||||||
|
//fmt.Printf("req: %v\n", req)
|
||||||
|
m := new(dns.Msg)
|
||||||
|
m.SetReply(req)
|
||||||
|
defer w.WriteMsg(m)
|
||||||
|
|
||||||
|
log.Info(m.String())
|
||||||
|
fmt.Printf("\n\nreq count: %v\nlen: %v\n\n", requestCount[req.Question[0].Name], len(b.TxtRecords[req.Question[0].Name]))
|
||||||
|
if requestCount[req.Question[0].Name] < len(b.TxtRecords[req.Question[0].Name]) {
|
||||||
|
if requestCount[req.Question[0].Name] == 3 {
|
||||||
|
requestCount[req.Question[0].Name] = 0
|
||||||
|
}
|
||||||
|
//fmt.Println("requestcount")
|
||||||
|
for _, record := range b.TxtRecords[req.Question[0].Name][requestCount[req.Question[0].Name]] {
|
||||||
|
fmt.Println("for loop")
|
||||||
|
txtRR, _ := dns.NewRR(fmt.Sprintf("%s %d IN TXT %s", req.Question[0].Name, defaultTTL, record))
|
||||||
|
m.Answer = append(m.Answer, txtRR)
|
||||||
|
}
|
||||||
|
requestCount[req.Question[0].Name]++
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, rr := range m.Answer {
|
||||||
|
//fmt.Printf("responding %v", rr.String())
|
||||||
|
log.Info("responding", "response", rr.String())
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
}
|
|
@ -28,3 +28,10 @@ func (c Testclient) TestingHTTPClient(handler http.Handler) (*http.Client, func(
|
||||||
|
|
||||||
return cli, s.Close
|
return cli, s.Close
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewTestingHTTPClient - Create a new TestingHTTPClient
|
||||||
|
func (c *Testclient) NewTestingHTTPClient(handler http.Handler) (*http.Client, func()) {
|
||||||
|
client, fn := c.TestingHTTPClient(handler)
|
||||||
|
|
||||||
|
return client, fn
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue