mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-10-31 15:53:33 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			196 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package acme
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"testing"
 | |
| 
 | |
| 	"npm/internal/config"
 | |
| 	"npm/internal/entity/certificateauthority"
 | |
| 	"npm/internal/entity/dnsprovider"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| // TODO configurable
 | |
| const acmeLogFile = "/data/logs/acme.sh.log"
 | |
| 
 | |
| func TestBuildCertRequestArgs(t *testing.T) {
 | |
| 	type want struct {
 | |
| 		args []string
 | |
| 		err  error
 | |
| 	}
 | |
| 
 | |
| 	wellknown := config.Configuration.Acmesh.GetWellknown()
 | |
| 	exampleKey := fmt.Sprintf("%s/example.com.key", config.Configuration.Acmesh.CertHome)
 | |
| 	exampleChain := fmt.Sprintf("%s/a.crt", config.Configuration.Acmesh.CertHome)
 | |
| 
 | |
| 	tests := []struct {
 | |
| 		name                string
 | |
| 		domains             []string
 | |
| 		method              string
 | |
| 		outputFullchainFile string
 | |
| 		outputKeyFile       string
 | |
| 		dnsProvider         *dnsprovider.Model
 | |
| 		ca                  *certificateauthority.Model
 | |
| 		want                want
 | |
| 	}{
 | |
| 		{
 | |
| 			name:                "http single domain",
 | |
| 			domains:             []string{"example.com"},
 | |
| 			method:              "http",
 | |
| 			outputFullchainFile: exampleChain,
 | |
| 			outputKeyFile:       exampleKey,
 | |
| 			dnsProvider:         nil,
 | |
| 			ca:                  nil,
 | |
| 			want: want{
 | |
| 				args: []string{
 | |
| 					"--issue",
 | |
| 					"--fullchain-file",
 | |
| 					exampleChain,
 | |
| 					"--key-file",
 | |
| 					exampleKey,
 | |
| 					"-d",
 | |
| 					"example.com",
 | |
| 					"-w",
 | |
| 					wellknown,
 | |
| 					"--log",
 | |
| 					acmeLogFile,
 | |
| 					"--debug",
 | |
| 					"2",
 | |
| 				},
 | |
| 				err: nil,
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			name:                "http multiple domains",
 | |
| 			domains:             []string{"example.com", "example-two.com", "example-three.com"},
 | |
| 			method:              "http",
 | |
| 			outputFullchainFile: exampleChain,
 | |
| 			outputKeyFile:       exampleKey,
 | |
| 			dnsProvider:         nil,
 | |
| 			ca:                  nil,
 | |
| 			want: want{
 | |
| 				args: []string{
 | |
| 					"--issue",
 | |
| 					"--fullchain-file",
 | |
| 					exampleChain,
 | |
| 					"--key-file",
 | |
| 					exampleKey,
 | |
| 					"-d",
 | |
| 					"example.com",
 | |
| 					"-w",
 | |
| 					wellknown,
 | |
| 					"-d",
 | |
| 					"example-two.com",
 | |
| 					"-d",
 | |
| 					"example-three.com",
 | |
| 					"--log",
 | |
| 					acmeLogFile,
 | |
| 					"--debug",
 | |
| 					"2",
 | |
| 				},
 | |
| 				err: nil,
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			name:                "http single domain with dns provider",
 | |
| 			domains:             []string{"example.com"},
 | |
| 			method:              "http",
 | |
| 			outputFullchainFile: exampleChain,
 | |
| 			outputKeyFile:       exampleKey,
 | |
| 			dnsProvider: &dnsprovider.Model{
 | |
| 				AcmeshName: "dns_cf",
 | |
| 			},
 | |
| 			ca: nil,
 | |
| 			want: want{
 | |
| 				args: nil,
 | |
| 				err:  ErrHTTPHasDNSProvider,
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			name:                "dns single domain",
 | |
| 			domains:             []string{"example.com"},
 | |
| 			method:              "dns",
 | |
| 			outputFullchainFile: exampleChain,
 | |
| 			outputKeyFile:       exampleKey,
 | |
| 			dnsProvider: &dnsprovider.Model{
 | |
| 				AcmeshName: "dns_cf",
 | |
| 			},
 | |
| 			ca: nil,
 | |
| 			want: want{
 | |
| 				args: []string{
 | |
| 					"--issue",
 | |
| 					"--fullchain-file",
 | |
| 					exampleChain,
 | |
| 					"--key-file",
 | |
| 					exampleKey,
 | |
| 					"-d",
 | |
| 					"example.com",
 | |
| 					"--dns",
 | |
| 					"dns_cf",
 | |
| 					"--log",
 | |
| 					acmeLogFile,
 | |
| 					"--debug",
 | |
| 					"2",
 | |
| 				},
 | |
| 				err: nil,
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			name:                "dns multiple domains",
 | |
| 			domains:             []string{"example.com", "example-two.com", "example-three.com"},
 | |
| 			method:              "dns",
 | |
| 			outputFullchainFile: exampleChain,
 | |
| 			outputKeyFile:       exampleKey,
 | |
| 			dnsProvider: &dnsprovider.Model{
 | |
| 				AcmeshName: "dns_cf",
 | |
| 			},
 | |
| 			ca: nil,
 | |
| 			want: want{
 | |
| 				args: []string{
 | |
| 					"--issue",
 | |
| 					"--fullchain-file",
 | |
| 					exampleChain,
 | |
| 					"--key-file",
 | |
| 					exampleKey,
 | |
| 					"-d",
 | |
| 					"example.com",
 | |
| 					"--dns",
 | |
| 					"dns_cf",
 | |
| 					"-d",
 | |
| 					"example-two.com",
 | |
| 					"-d",
 | |
| 					"example-three.com",
 | |
| 					"--log",
 | |
| 					acmeLogFile,
 | |
| 					"--debug",
 | |
| 					"2",
 | |
| 				},
 | |
| 				err: nil,
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			name:                "dns single domain no provider",
 | |
| 			domains:             []string{"example.com"},
 | |
| 			method:              "dns",
 | |
| 			outputFullchainFile: exampleChain,
 | |
| 			outputKeyFile:       exampleKey,
 | |
| 			dnsProvider:         nil,
 | |
| 			ca:                  nil,
 | |
| 			want: want{
 | |
| 				args: nil,
 | |
| 				err:  ErrDNSNeedsDNSProvider,
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, tt := range tests {
 | |
| 		t.Run(tt.name, func(t *testing.T) {
 | |
| 			args, err := buildCertRequestArgs(tt.domains, tt.method, tt.outputFullchainFile, tt.outputKeyFile, tt.dnsProvider, tt.ca, false)
 | |
| 
 | |
| 			assert.Equal(t, tt.want.args, args)
 | |
| 			assert.Equal(t, tt.want.err, err)
 | |
| 		})
 | |
| 	}
 | |
| }
 |