mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-04-29 18:42:28 +00:00
146 lines
3.7 KiB
Go
146 lines
3.7 KiB
Go
package validator
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"npm/internal/entity/certificate"
|
|
"npm/internal/entity/host"
|
|
"npm/internal/entity/nginxtemplate"
|
|
"npm/internal/entity/upstream"
|
|
"npm/internal/types"
|
|
|
|
"github.com/stretchr/testify/mock"
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// Mocking the dependencies
|
|
type MockCertificate struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (m *MockCertificate) GetByID(id uint) (certificate.Model, error) {
|
|
args := m.Called(id)
|
|
return args.Get(0).(certificate.Model), args.Error(1)
|
|
}
|
|
|
|
type MockUpstream struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (m *MockUpstream) GetByID(id uint) (upstream.Model, error) {
|
|
args := m.Called(id)
|
|
return args.Get(0).(upstream.Model), args.Error(1)
|
|
}
|
|
|
|
type MockNginxTemplate struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (m *MockNginxTemplate) GetByID(id uint) (nginxtemplate.Model, error) {
|
|
args := m.Called(id)
|
|
return args.Get(0).(nginxtemplate.Model), args.Error(1)
|
|
}
|
|
|
|
func TestValidateHost(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
host host.Model
|
|
wantErr string
|
|
}{
|
|
{
|
|
name: "valid host with certificate and upstream",
|
|
host: host.Model{
|
|
CertificateID: types.NullableDBUint{Uint: 1},
|
|
UpstreamID: types.NullableDBUint{Uint: 1},
|
|
NginxTemplateID: 1,
|
|
Type: "some-type",
|
|
},
|
|
wantErr: "",
|
|
},
|
|
{
|
|
name: "certificate does not exist",
|
|
host: host.Model{
|
|
CertificateID: types.NullableDBUint{Uint: 9},
|
|
},
|
|
wantErr: "Certificate #9 does not exist: record not found",
|
|
},
|
|
{
|
|
name: "upstream does not exist",
|
|
host: host.Model{
|
|
UpstreamID: types.NullableDBUint{Uint: 9},
|
|
},
|
|
wantErr: "Upstream #9 does not exist: record not found",
|
|
},
|
|
{
|
|
name: "proxy host and port set with upstream",
|
|
host: host.Model{
|
|
UpstreamID: types.NullableDBUint{Uint: 1},
|
|
ProxyHost: "proxy",
|
|
ProxyPort: 8080,
|
|
},
|
|
wantErr: "Proxy Host or Port cannot be set when using an Upstream",
|
|
},
|
|
{
|
|
name: "proxy host and port not set without upstream",
|
|
host: host.Model{
|
|
ProxyHost: "",
|
|
ProxyPort: 0,
|
|
},
|
|
wantErr: "Proxy Host and Port must be specified, unless using an Upstream",
|
|
},
|
|
{
|
|
name: "nginx template does not exist",
|
|
host: host.Model{
|
|
ProxyHost: "proxy",
|
|
ProxyPort: 8080,
|
|
NginxTemplateID: 9,
|
|
},
|
|
wantErr: "Host Template #9 does not exist: record not found",
|
|
},
|
|
{
|
|
name: "nginx template type mismatch",
|
|
host: host.Model{
|
|
ProxyHost: "proxy",
|
|
ProxyPort: 8080,
|
|
NginxTemplateID: 8,
|
|
Type: "some-type",
|
|
},
|
|
wantErr: "Host Template #8 is not valid for this host type",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
mockCert := new(MockCertificate)
|
|
mockUpstream := new(MockUpstream)
|
|
mockNginxTemplate := new(MockNginxTemplate)
|
|
|
|
certificateGetByID = mockCert.GetByID
|
|
upstreamGetByID = mockUpstream.GetByID
|
|
nginxtemplateGetByID = mockNginxTemplate.GetByID
|
|
|
|
// id 1 is valid
|
|
mockCert.On("GetByID", uint(1)).Return(certificate.Model{}, nil)
|
|
mockUpstream.On("GetByID", uint(1)).Return(upstream.Model{}, nil)
|
|
mockNginxTemplate.On("GetByID", uint(1)).Return(nginxtemplate.Model{Type: "some-type"}, nil)
|
|
|
|
// id 9 is errors
|
|
mockCert.On("GetByID", uint(9)).Return(certificate.Model{}, gorm.ErrRecordNotFound)
|
|
mockUpstream.On("GetByID", uint(9)).Return(upstream.Model{}, gorm.ErrRecordNotFound)
|
|
mockNginxTemplate.On("GetByID", uint(9)).Return(nginxtemplate.Model{}, gorm.ErrRecordNotFound)
|
|
|
|
// 8 is special
|
|
mockNginxTemplate.On("GetByID", uint(8)).Return(nginxtemplate.Model{Type: "different-type"}, nil)
|
|
|
|
err := ValidateHost(tt.host)
|
|
if tt.wantErr != "" {
|
|
require.NotNil(t, err)
|
|
require.Equal(t, tt.wantErr, err.Error())
|
|
} else {
|
|
require.Nil(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|