feat(common): add traefik middlewares (#30529)
**Description** <!-- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. --> ⚒️ Fixes # <!--(issue)--> **⚙️ Type of change** - [x] ⚙️ Feature/App addition - [ ] 🪛 Bugfix - [ ] ⚠️ Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] 🔃 Refactor of current code **🧪 How Has This Been Tested?** <!-- Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration --> **📃 Notes:** <!-- Please enter any other relevant information here --> **✔️ Checklist:** - [x] ⚖️ My code follows the style guidelines of this project - [x] 👀 I have performed a self-review of my own code - [x] #️⃣ I have commented my code, particularly in hard-to-understand areas - [x] 📄 I have made corresponding changes to the documentation - [x] ⚠️ My changes generate no new warnings - [x] 🧪 I have added tests to this description that prove my fix is effective or that my feature works - [x] ⬆️ I increased versions for any altered app according to semantic versioning - [x] I made sure the title starts with `feat(chart-name):`, `fix(chart-name):` or `chore(chart-name):` **➕ App addition** If this PR is an app addition please make sure you have done the following. - [ ] 🖼️ I have added an icon in the Chart's root directory called `icon.png` --- _Please don't blindly check all the boxes. Read them and only check those that apply. Those checkboxes are there for the reviewer to see what is this all about and the status of this PR with a quick glance._
This commit is contained in:
@@ -7,7 +7,7 @@ apiVersion: v2
|
||||
appVersion: unknown
|
||||
dependencies:
|
||||
- name: common
|
||||
version: ~25.3.0
|
||||
version: ~25.4.0
|
||||
repository: file://../common/
|
||||
condition: ""
|
||||
alias: ""
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
suite: middlewares metadata test
|
||||
templates:
|
||||
- common.yaml
|
||||
chart:
|
||||
appVersion: &appVer v9.9.9
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with middlewares created with labels and annotations
|
||||
set:
|
||||
label1: label1
|
||||
label2: global_label2
|
||||
annotation1: annotation1
|
||||
annotation2: global_annotation2
|
||||
global:
|
||||
labels:
|
||||
g_label1: global_label1
|
||||
g_label2: "{{ .Values.label2 }}"
|
||||
annotations:
|
||||
g_annotation1: global_annotation1
|
||||
g_annotation2: "{{ .Values.annotation2 }}"
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
labels:
|
||||
label1: "{{ .Values.label1 }}"
|
||||
label2: label2
|
||||
annotations:
|
||||
annotation1: "{{ .Values.annotation1 }}"
|
||||
annotation2: annotation2
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: metadata.annotations
|
||||
value:
|
||||
annotation1: annotation1
|
||||
annotation2: annotation2
|
||||
g_annotation1: global_annotation1
|
||||
g_annotation2: global_annotation2
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: metadata.labels
|
||||
value:
|
||||
app: common-test-1.0.0
|
||||
release: test-release-name
|
||||
helm-revision: "0"
|
||||
helm.sh/chart: common-test-1.0.0
|
||||
app.kubernetes.io/name: common-test
|
||||
app.kubernetes.io/instance: test-release-name
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/version: *appVer
|
||||
g_label1: global_label1
|
||||
g_label2: global_label2
|
||||
label1: label1
|
||||
label2: label2
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: metadata.namespace
|
||||
value: test-release-namespace
|
||||
|
||||
- it: should pass with middlewares created with namespace
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
namespace: some-namespace
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: metadata.namespace
|
||||
value: some-namespace
|
||||
|
||||
- it: should pass with middlewares created with object namespace from tpl
|
||||
set:
|
||||
key: some-namespace
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
namespace: "{{ .Values.key }}"
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: metadata.namespace
|
||||
value: some-namespace
|
||||
|
||||
- it: should pass with middlewares created with namespace from global with tpl
|
||||
set:
|
||||
key: global-namespace
|
||||
global:
|
||||
namespace: "{{ .Values.key }}"
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: metadata.namespace
|
||||
value: global-namespace
|
||||
|
||||
- it: should pass with middlewares created with namespace from root with tpl
|
||||
set:
|
||||
key: local-namespace
|
||||
namespace: "{{ .Values.key }}"
|
||||
global:
|
||||
namespace: global-namespace
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: metadata.namespace
|
||||
value: local-namespace
|
||||
@@ -0,0 +1,37 @@
|
||||
suite: add-prefix middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: add-prefix
|
||||
data:
|
||||
prefix: some-prefix
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
addPrefix:
|
||||
prefix: some-prefix
|
||||
|
||||
- it: should fail with missing prefix
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: add-prefix
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (add-prefix) - Expected [prefix] to be set
|
||||
@@ -0,0 +1,81 @@
|
||||
suite: basicAuth middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: basic-auth
|
||||
data:
|
||||
secret: some-secret
|
||||
my-middleware2:
|
||||
enabled: true
|
||||
type: basic-auth
|
||||
data:
|
||||
users:
|
||||
- username: some-username
|
||||
password: some-password
|
||||
- username: some-other-username
|
||||
password: some-other-password
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
basicAuth:
|
||||
secret: some-secret
|
||||
- documentIndex: &otherMiddlewareDoc 1
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *otherMiddlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
basicAuth:
|
||||
secret: test-release-name-common-test-my-middleware2
|
||||
- documentIndex: &secretDoc 2
|
||||
isKind:
|
||||
of: Secret
|
||||
- documentIndex: *secretDoc
|
||||
equal:
|
||||
path: metadata.name
|
||||
value: test-release-name-common-test-my-middleware2
|
||||
- documentIndex: *secretDoc
|
||||
matchRegex:
|
||||
path: stringData.users
|
||||
pattern: some-username:.+\nsome-other-username:.+
|
||||
|
||||
- it: should fail with missing both users and secret
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: basic-auth
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (basic-auth) - Expected at least one of [users] or [secret] to be set
|
||||
|
||||
- it: should fail with both secret and users set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: basic-auth
|
||||
data:
|
||||
secret: some-secret
|
||||
users:
|
||||
- username: some-username
|
||||
password: some-password
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (basic-auth) - Expected either [users] or [secret] to be set, but not both
|
||||
@@ -0,0 +1,71 @@
|
||||
suite: buffering middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
maxRequestBodyBytes: 1024
|
||||
memRequestBodyBytes: 1024
|
||||
maxResponseBodyBytes: 1024
|
||||
memResponseBodyBytes: 1024
|
||||
retryExpression: some-expression
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
buffering:
|
||||
maxRequestBodyBytes: 1024
|
||||
memRequestBodyBytes: 1024
|
||||
maxResponseBodyBytes: 1024
|
||||
memResponseBodyBytes: 1024
|
||||
retryExpression: "some-expression"
|
||||
|
||||
- it: should pass with only maxRequestBodyBytes set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
maxRequestBodyBytes: 1024
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
buffering:
|
||||
maxRequestBodyBytes: 1024
|
||||
|
||||
- it: should render 0 and non-null values
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
maxRequestBodyBytes: 0
|
||||
memRequestBodyBytes: null
|
||||
maxResponseBodyBytes: 1024
|
||||
memResponseBodyBytes: 1024
|
||||
retryExpression: ""
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
buffering:
|
||||
maxRequestBodyBytes: 0
|
||||
maxResponseBodyBytes: 1024
|
||||
memResponseBodyBytes: 1024
|
||||
@@ -0,0 +1,42 @@
|
||||
suite: chain middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: chain
|
||||
data:
|
||||
middlewares:
|
||||
- name: some-name
|
||||
expandObjectName: false
|
||||
- name: some-other-name
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
chain:
|
||||
middlewares:
|
||||
- name: some-name
|
||||
- name: test-release-name-common-test-some-other-name
|
||||
|
||||
- it: should fail with missing middlewares
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: chain
|
||||
data:
|
||||
middlewares: []
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (chain) - Expected [middlewares] to be set
|
||||
@@ -0,0 +1,22 @@
|
||||
suite: compress middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: compress
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
compress: {}
|
||||
@@ -0,0 +1,22 @@
|
||||
suite: contentType middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: content-type
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
contentType: {}
|
||||
@@ -0,0 +1,106 @@
|
||||
suite: forward-auth middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with values
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: forward-auth
|
||||
data:
|
||||
address: some-address
|
||||
authResponseHeadersRegex: some-regex
|
||||
trustForwardHeader: true
|
||||
authResponseHeaders:
|
||||
- some-header
|
||||
authRequestHeaders:
|
||||
- some-header
|
||||
tls:
|
||||
insecureSkipVerify: true
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
forwardAuth:
|
||||
address: some-address
|
||||
authResponseHeadersRegex: some-regex
|
||||
trustForwardHeader: true
|
||||
authResponseHeaders:
|
||||
- some-header
|
||||
authRequestHeaders:
|
||||
- some-header
|
||||
tls:
|
||||
insecureSkipVerify: true
|
||||
|
||||
- it: should fail with missing address
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: forward-auth
|
||||
data:
|
||||
authResponseHeadersRegex: some-regex
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (forward-auth) - Expected [address] to be set
|
||||
|
||||
- it: should fail with invalid authResponseHeaders
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: forward-auth
|
||||
data:
|
||||
address: some-address
|
||||
authResponseHeaders: some-header
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (forward-auth) - Expected [authResponseHeaders] to be a list, but got [string]
|
||||
|
||||
- it: should fail with invalid authRequestHeaders
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: forward-auth
|
||||
data:
|
||||
address: some-address
|
||||
authRequestHeaders: some-header
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (forward-auth) - Expected [authRequestHeaders] to be a list, but got [string]
|
||||
|
||||
- it: should fail with invalid tls.insecureSkipVerify
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: forward-auth
|
||||
data:
|
||||
address: some-address
|
||||
tls:
|
||||
insecureSkipVerify: some-value
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (forward-auth) - Expected [tls.insecureSkipVerify] to be a boolean, but got [string]
|
||||
|
||||
- it: should fail with invalid trustForwardHeader
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: forward-auth
|
||||
data:
|
||||
address: some-address
|
||||
trustForwardHeader: some-value
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (forward-auth) - Expected [trustForwardHeader] to be a boolean, but got [string]
|
||||
@@ -0,0 +1,119 @@
|
||||
suite: headers middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: headers
|
||||
data:
|
||||
customRequestHeaders:
|
||||
some-name: some-value
|
||||
some-other-name: some-other-value
|
||||
customResponseHeaders:
|
||||
some-name: some-value
|
||||
some-other-name: some-other-value
|
||||
accessControlAllowCredentials: true
|
||||
accessControlAllowHeaders:
|
||||
- some-header
|
||||
- some-other-header
|
||||
accessControlAllowMethods:
|
||||
- GET
|
||||
- DELETE
|
||||
accessControlAllowOriginList:
|
||||
- some-origin
|
||||
- some-other-origin
|
||||
accessControlAllowOriginListRegex:
|
||||
- some-origin-regex
|
||||
- some-other-origin-regex
|
||||
accessControlExposeHeaders:
|
||||
- some-header
|
||||
- some-other-header
|
||||
accessControlMaxAge: 1000
|
||||
addVaryHeader: true
|
||||
allowedHosts:
|
||||
- some-host
|
||||
- some-other-host
|
||||
hostsProxyHeaders:
|
||||
- some-header
|
||||
- some-other-header
|
||||
sslProxyHeaders:
|
||||
some-header: some-value
|
||||
some-other-header: some-other-value
|
||||
stsSeconds: 1000
|
||||
stsIncludeSubdomains: true
|
||||
stsPreload: true
|
||||
forceSTSHeader: true
|
||||
frameDeny: true
|
||||
customFrameOptionsValue: some-value
|
||||
contentTypeNosniff: true
|
||||
browserXssFilter: true
|
||||
customBrowserXSSValue: some-value
|
||||
contentSecurityPolicy: some-value
|
||||
contentSecurityPolicyReportOnly: true
|
||||
publicKey: some-public-key
|
||||
referrerPolicy: some-referrer-policy
|
||||
permissionsPolicy: some-permissions-policy
|
||||
isDevelopment: true
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
headers:
|
||||
customRequestHeaders:
|
||||
some-name: some-value
|
||||
some-other-name: some-other-value
|
||||
customResponseHeaders:
|
||||
some-name: some-value
|
||||
some-other-name: some-other-value
|
||||
accessControlAllowCredentials: true
|
||||
accessControlAllowHeaders:
|
||||
- some-header
|
||||
- some-other-header
|
||||
accessControlAllowMethods:
|
||||
- GET
|
||||
- DELETE
|
||||
accessControlAllowOriginList:
|
||||
- some-origin
|
||||
- some-other-origin
|
||||
accessControlAllowOriginListRegex:
|
||||
- some-origin-regex
|
||||
- some-other-origin-regex
|
||||
accessControlExposeHeaders:
|
||||
- some-header
|
||||
- some-other-header
|
||||
accessControlMaxAge: 1000
|
||||
addVaryHeader: true
|
||||
allowedHosts:
|
||||
- some-host
|
||||
- some-other-host
|
||||
hostsProxyHeaders:
|
||||
- some-header
|
||||
- some-other-header
|
||||
sslProxyHeaders:
|
||||
some-header: some-value
|
||||
some-other-header: some-other-value
|
||||
stsSeconds: 1000
|
||||
stsIncludeSubdomains: true
|
||||
stsPreload: true
|
||||
forceSTSHeader: true
|
||||
frameDeny: true
|
||||
customFrameOptionsValue: some-value
|
||||
contentTypeNosniff: true
|
||||
browserXssFilter: true
|
||||
customBrowserXSSValue: some-value
|
||||
contentSecurityPolicy: some-value
|
||||
contentSecurityPolicyReportOnly: true
|
||||
publicKey: some-public-key
|
||||
referrerPolicy: some-referrer-policy
|
||||
permissionsPolicy: some-permissions-policy
|
||||
isDevelopment: true
|
||||
@@ -0,0 +1,62 @@
|
||||
suite: ip-allow-list middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: ip-allow-list
|
||||
data:
|
||||
sourceRange:
|
||||
- some-source-range
|
||||
ipStrategy:
|
||||
depth: 1
|
||||
excludedIPs:
|
||||
- some-excluded-ip
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
ipAllowList:
|
||||
sourceRange:
|
||||
- some-source-range
|
||||
ipStrategy:
|
||||
depth: 1
|
||||
excludedIPs:
|
||||
- some-excluded-ip
|
||||
|
||||
- it: should fail with invalid sourceRange
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: ip-allow-list
|
||||
data:
|
||||
sourceRange: some-source-range
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (ip-allow-list) - Expected [sourceRange] to be a list, but got [string]
|
||||
|
||||
- it: should fail with invalid ipStrategy.excludedIPs
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: ip-allow-list
|
||||
data:
|
||||
sourceRange:
|
||||
- some-source-range
|
||||
ipStrategy:
|
||||
excludedIPs: some-excluded-ip
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (ip-allow-list) - Expected [ipStrategy.excludedIPs] to be a list, but got [string]
|
||||
@@ -0,0 +1,177 @@
|
||||
suite: plugin-bouncer middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-bouncer
|
||||
data:
|
||||
enabled: true
|
||||
logLevel: DEBUG
|
||||
updateIntervalSeconds: 60
|
||||
updateMaxFailure: 0
|
||||
defaultDecisionSeconds: 60
|
||||
httpTimeoutSeconds: 10
|
||||
crowdsecMode: live
|
||||
crowdsecAppsecEnabled: false
|
||||
crowdsecAppsecHost: crowdsec:7422
|
||||
crowdsecAppsecFailureBlock: true
|
||||
crowdsecAppsecUnreachableBlock: true
|
||||
crowdsecLapiKey: privateKey-foo
|
||||
crowdsecLapiHost: crowdsec:8080
|
||||
crowdsecLapiScheme: http
|
||||
crowdsecLapiTLSInsecureVerify: false
|
||||
crowdsecCapiMachineId: login
|
||||
crowdsecCapiPassword: password
|
||||
crowdsecCapiScenarios:
|
||||
- crowdsecurity/http-path-traversal-probing
|
||||
- crowdsecurity/http-xss-probing
|
||||
- crowdsecurity/http-generic-bf
|
||||
forwardedHeadersTrustedIPs:
|
||||
- 10.0.10.23/32
|
||||
- 10.0.20.0/24
|
||||
clientTrustedIPs:
|
||||
- 192.168.1.0/24
|
||||
forwardedHeadersCustomName: X-Custom-Header
|
||||
remediationHeadersCustomName: cs-remediation
|
||||
redisCacheEnabled: false
|
||||
redisCacheHost: "redis:6379"
|
||||
redisCachePassword: password
|
||||
redisCacheDatabase: "5"
|
||||
crowdsecLapiTLSCertificateAuthority: |-
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEBzCCAu+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT
|
||||
...
|
||||
Q0veeNzBQXg1f/JxfeA39IDIX1kiCf71tGlT
|
||||
-----END CERTIFICATE-----
|
||||
crowdsecLapiTLSCertificateBouncer: |-
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEHjCCAwagAwIBAgIUOBTs1eqkaAUcPplztUr2xRapvNAwDQYJKoZIhvcNAQEL
|
||||
...
|
||||
RaXAnYYUVRblS1jmePemh388hFxbmrpG2pITx8B5FMULqHoj11o2Rl0gSV6tHIHz
|
||||
N2U=
|
||||
-----END CERTIFICATE-----
|
||||
crowdsecLapiTLSCertificateBouncerKey: |-
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEAtYQnbJqifH+ZymePylDxGGLIuxzcAUU4/ajNj+qRAdI/Ux3d
|
||||
...
|
||||
ic5cDRo6/VD3CS3MYzyBcibaGaV34nr0G/pI+KEqkYChzk/PZRA=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
captchaProvider: hcaptcha
|
||||
captchaSiteKey: FIXME
|
||||
captchaSecretKey: FIXME
|
||||
captchaGracePeriodSeconds: 1800
|
||||
captchaHTMLFilePath: /captcha.html
|
||||
banHTMLFilePath: /ban.html
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
bouncer:
|
||||
enabled: true
|
||||
logLevel: DEBUG
|
||||
updateIntervalSeconds: 60
|
||||
updateMaxFailure: 0
|
||||
defaultDecisionSeconds: 60
|
||||
httpTimeoutSeconds: 10
|
||||
crowdsecMode: live
|
||||
crowdsecAppsecEnabled: false
|
||||
crowdsecAppsecHost: crowdsec:7422
|
||||
crowdsecAppsecFailureBlock: true
|
||||
crowdsecAppsecUnreachableBlock: true
|
||||
crowdsecLapiKey: privateKey-foo
|
||||
crowdsecLapiHost: crowdsec:8080
|
||||
crowdsecLapiScheme: http
|
||||
crowdsecLapiTLSInsecureVerify: false
|
||||
crowdsecCapiMachineId: login
|
||||
crowdsecCapiPassword: password
|
||||
crowdsecCapiScenarios:
|
||||
- crowdsecurity/http-path-traversal-probing
|
||||
- crowdsecurity/http-xss-probing
|
||||
- crowdsecurity/http-generic-bf
|
||||
forwardedHeadersTrustedIPs:
|
||||
- 10.0.10.23/32
|
||||
- 10.0.20.0/24
|
||||
clientTrustedIPs:
|
||||
- 192.168.1.0/24
|
||||
forwardedHeadersCustomName: X-Custom-Header
|
||||
remediationHeadersCustomName: cs-remediation
|
||||
redisCacheEnabled: false
|
||||
redisCacheHost: "redis:6379"
|
||||
redisCachePassword: password
|
||||
redisCacheDatabase: "5"
|
||||
crowdsecLapiTLSCertificateAuthority: |-
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEBzCCAu+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT
|
||||
...
|
||||
Q0veeNzBQXg1f/JxfeA39IDIX1kiCf71tGlT
|
||||
-----END CERTIFICATE-----
|
||||
crowdsecLapiTLSCertificateBouncer: |-
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEHjCCAwagAwIBAgIUOBTs1eqkaAUcPplztUr2xRapvNAwDQYJKoZIhvcNAQEL
|
||||
...
|
||||
RaXAnYYUVRblS1jmePemh388hFxbmrpG2pITx8B5FMULqHoj11o2Rl0gSV6tHIHz
|
||||
N2U=
|
||||
-----END CERTIFICATE-----
|
||||
crowdsecLapiTLSCertificateBouncerKey: |-
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEAtYQnbJqifH+ZymePylDxGGLIuxzcAUU4/ajNj+qRAdI/Ux3d
|
||||
...
|
||||
ic5cDRo6/VD3CS3MYzyBcibaGaV34nr0G/pI+KEqkYChzk/PZRA=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
captchaProvider: hcaptcha
|
||||
captchaSiteKey: FIXME
|
||||
captchaSecretKey: FIXME
|
||||
captchaGracePeriodSeconds: 1800
|
||||
captchaHTMLFilePath: /captcha.html
|
||||
banHTMLFilePath: /ban.html
|
||||
|
||||
- it: should pass with pluginName set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-bouncer
|
||||
data:
|
||||
pluginName: traefik-bouncer-test
|
||||
enabled: true
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-bouncer-test:
|
||||
enabled: true
|
||||
|
||||
- it: should fail with missing enabled
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-bouncer
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (plugin-bouncer) - Expected [enabled] to be set
|
||||
|
||||
- it: should fail with invalid enabled
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-bouncer
|
||||
data:
|
||||
enabled: some-value
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (plugin-bouncer) - Expected [enabled] to be a boolean, but got [string]
|
||||
@@ -0,0 +1,101 @@
|
||||
suite: plugin-geoblock middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-geoblock
|
||||
data:
|
||||
api: https://api.geoblock.org/v2/geoblock
|
||||
allowLocalRequests: true
|
||||
logLocalRequests: true
|
||||
logAllowedRequests: true
|
||||
logApiRequests: true
|
||||
apiTimeoutMs: 1000
|
||||
cacheSize: 1000
|
||||
forceMonthlyUpdate: true
|
||||
allowUnknownCountries: true
|
||||
unknownCountryApiResponse: some-value
|
||||
blackListMode: true
|
||||
silentStartUp: true
|
||||
addCountryHeader: true
|
||||
countries:
|
||||
- some-country
|
||||
- some-other-country
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
GeoBlock:
|
||||
allowLocalRequests: true
|
||||
logLocalRequests: true
|
||||
logAllowedRequests: true
|
||||
logApiRequests: true
|
||||
api: https://api.geoblock.org/v2/geoblock
|
||||
apiTimeoutMs: 1000
|
||||
cacheSize: 1000
|
||||
forceMonthlyUpdate: true
|
||||
allowUnknownCountries: true
|
||||
unknownCountryApiResponse: some-value
|
||||
blackListMode: true
|
||||
silentStartUp: true
|
||||
addCountryHeader: true
|
||||
countries:
|
||||
- some-country
|
||||
- some-other-country
|
||||
|
||||
- it: should pass with pluginName set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-geoblock
|
||||
data:
|
||||
pluginName: traefik-geoblock-test
|
||||
api: https://api.geoblock.org/v2/geoblock
|
||||
countries:
|
||||
- some-country
|
||||
- some-other-country
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-geoblock-test:
|
||||
api: https://api.geoblock.org/v2/geoblock
|
||||
countries:
|
||||
- some-country
|
||||
- some-other-country
|
||||
|
||||
- it: should fail with missing api
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-geoblock
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (plugin-geoblock) - Expected [api] to be set
|
||||
|
||||
- it: should fail with missing countries
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-geoblock
|
||||
data:
|
||||
api: https://api.geoblock.org/v2/geoblock
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (plugin-geoblock) - Expected [countries] to be set
|
||||
@@ -0,0 +1,57 @@
|
||||
suite: plugin-mod-security middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-mod-security
|
||||
data:
|
||||
modSecurityUrl: some-url
|
||||
timeoutMillis: 1000
|
||||
maxBodySize: 1024
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-modsecurity-plugin:
|
||||
modSecurityUrl: some-url
|
||||
timeoutMillis: 1000
|
||||
maxBodySize: 1024
|
||||
|
||||
- it: should pass with pluginName set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-mod-security
|
||||
data:
|
||||
pluginName: traefik-mod-security-test
|
||||
modSecurityUrl: some-url
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-mod-security-test:
|
||||
modSecurityUrl: some-url
|
||||
|
||||
- it: should fail with missing modSecurityUrl
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-mod-security
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (modsecurity) - Expected [modSecurityUrl] to be set
|
||||
@@ -0,0 +1,61 @@
|
||||
suite: plugin-real-ip middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-real-ip
|
||||
data:
|
||||
excludednets:
|
||||
- some-excluded-net
|
||||
- some-other-excluded-net
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-real-ip:
|
||||
excludednets:
|
||||
- some-excluded-net
|
||||
- some-other-excluded-net
|
||||
|
||||
- it: should pass with pluginName set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-real-ip
|
||||
data:
|
||||
pluginName: traefik-real-ip-test
|
||||
excludednets:
|
||||
- some-excluded-net
|
||||
- some-other-excluded-net
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-real-ip-test:
|
||||
excludednets:
|
||||
- some-excluded-net
|
||||
- some-other-excluded-net
|
||||
|
||||
- it: should fail with missing excludednets
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-real-ip
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (real-ip) - Expected [excludednets] to be set
|
||||
+125
@@ -0,0 +1,125 @@
|
||||
suite: plugin-rewrite-response-headers middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-rewrite-response-headers
|
||||
data:
|
||||
rewrites:
|
||||
- header: some-header
|
||||
regex: some-regex
|
||||
replacement: some-replacement
|
||||
- header: some-other-header
|
||||
regex: some-other-regex
|
||||
replacement: some-other-replacement
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
rewriteResponseHeaders:
|
||||
rewrites:
|
||||
- header: some-header
|
||||
regex: some-regex
|
||||
replacement: some-replacement
|
||||
- header: some-other-header
|
||||
regex: some-other-regex
|
||||
replacement: some-other-replacement
|
||||
|
||||
- it: should pass with pluginName set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-rewrite-response-headers
|
||||
data:
|
||||
pluginName: traefik-rewrite-response-headers-test
|
||||
rewrites:
|
||||
- header: some-header
|
||||
regex: some-regex
|
||||
replacement: some-replacement
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-rewrite-response-headers-test:
|
||||
rewrites:
|
||||
- header: some-header
|
||||
regex: some-regex
|
||||
replacement: some-replacement
|
||||
|
||||
- it: should fail with missing header
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-rewrite-response-headers
|
||||
data:
|
||||
rewrites:
|
||||
- regex: some-regex
|
||||
replacement: some-replacement
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (rewrite-response-headers) - Expected [header] to be set for rewrite [0]
|
||||
|
||||
- it: should fail with missing regex
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-rewrite-response-headers
|
||||
data:
|
||||
rewrites:
|
||||
- header: some-header
|
||||
replacement: some-replacement
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (rewrite-response-headers) - Expected [regex] to be set for rewrite [0]
|
||||
|
||||
- it: should fail with missing replacement
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-rewrite-response-headers
|
||||
data:
|
||||
rewrites:
|
||||
- header: some-header
|
||||
regex: some-regex
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (rewrite-response-headers) - Expected [replacement] to be set for rewrite [0]
|
||||
|
||||
- it: should fail with missing rewrites
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-rewrite-response-headers
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (rewrite-response-headers) - Expected [rewrites] to be set
|
||||
|
||||
- it: should fail with invalid rewrites
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-rewrite-response-headers
|
||||
data:
|
||||
rewrites: some-value
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (rewrite-response-headers) - Expected [rewrites] to be a list, but got [string]
|
||||
@@ -0,0 +1,77 @@
|
||||
suite: plugin-theme-park middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-theme-park
|
||||
data:
|
||||
app: sonarr
|
||||
theme: dark
|
||||
baseUrl: https://example.com
|
||||
addons:
|
||||
- some-addon
|
||||
- some-other-addon
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-themepark:
|
||||
app: sonarr
|
||||
theme: dark
|
||||
baseUrl: https://example.com
|
||||
addons:
|
||||
- some-addon
|
||||
- some-other-addon
|
||||
|
||||
- it: should pass with pluginName set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-theme-park
|
||||
data:
|
||||
app: sonarr
|
||||
theme: dark
|
||||
pluginName: traefik-themepark-test
|
||||
asserts:
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
plugin:
|
||||
traefik-themepark-test:
|
||||
app: sonarr
|
||||
theme: dark
|
||||
|
||||
- it: should fail with missing app
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-theme-park
|
||||
data:
|
||||
theme: dark
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (themepark) - Expected [app] to be set
|
||||
|
||||
- it: should fail with missing theme
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: plugin-theme-park
|
||||
data:
|
||||
app: sonarr
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (themepark) - Expected [theme] to be set
|
||||
@@ -0,0 +1,35 @@
|
||||
suite: compress middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: rate-limit
|
||||
data:
|
||||
average: 1000
|
||||
burst: 2000
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
rateLimit:
|
||||
average: 1000
|
||||
burst: 2000
|
||||
- it: should fail with missing average and burst
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: rate-limit
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (rate-limit) - Expected either [average] or [burst] to be set
|
||||
@@ -0,0 +1,69 @@
|
||||
suite: redirectRegex middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: redirect-regex
|
||||
data:
|
||||
regex: some-regex
|
||||
replacement: some-replacement
|
||||
permanent: true
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
redirectRegex:
|
||||
regex: some-regex
|
||||
replacement: some-replacement
|
||||
permanent: true
|
||||
|
||||
- it: should fail with missing regex
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: redirect-regex
|
||||
data:
|
||||
replacement: some-replacement
|
||||
permanent: true
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (redirect-regex) - Expected [regex] to be set
|
||||
|
||||
- it: should fail with missing replacement
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: redirect-regex
|
||||
data:
|
||||
regex: some-regex
|
||||
permanent: true
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (redirect-regex) - Expected [replacement] to be set
|
||||
|
||||
- it: should fail with invalid permanent
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: redirect-regex
|
||||
data:
|
||||
regex: some-regex
|
||||
replacement: some-replacement
|
||||
permanent: some-value
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (redirect-regex) - Expected [permanent] to be a boolean, but got [string]
|
||||
@@ -0,0 +1,52 @@
|
||||
suite: redirectScheme middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: redirect-scheme
|
||||
data:
|
||||
scheme: https
|
||||
permanent: true
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
redirectScheme:
|
||||
scheme: https
|
||||
permanent: true
|
||||
|
||||
- it: should fail with missing scheme
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: redirect-scheme
|
||||
data:
|
||||
permanent: true
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (redirect-scheme) - Expected [scheme] to be set
|
||||
|
||||
- it: should fail with invalid permanent
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: redirect-scheme
|
||||
data:
|
||||
scheme: https
|
||||
permanent: some-value
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (redirect-scheme) - Expected [permanent] to be a boolean, but got [string]
|
||||
@@ -0,0 +1,51 @@
|
||||
suite: replacePathRegex middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: replace-path-regex
|
||||
data:
|
||||
regex: /some-path
|
||||
replacement: /some-replacement
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
replacePathRegex:
|
||||
regex: /some-path
|
||||
replacement: /some-replacement
|
||||
|
||||
- it: should fail with missing regex
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: replace-path-regex
|
||||
data:
|
||||
replacement: /some-replacement
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (replace-path-regex) - Expected [regex] to be set
|
||||
|
||||
- it: should fail with missing replacement
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: replace-path-regex
|
||||
data:
|
||||
regex: /some-path
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (replace-path-regex) - Expected [replacement] to be set
|
||||
@@ -0,0 +1,37 @@
|
||||
suite: replacePath middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: replace-path
|
||||
data:
|
||||
path: /some-path
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
replacePath:
|
||||
path: /some-path
|
||||
|
||||
- it: should fail with missing path
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: replace-path
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (replace-path) - Expected [path] to be set
|
||||
@@ -0,0 +1,39 @@
|
||||
suite: retry middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: retry
|
||||
data:
|
||||
attempts: 3
|
||||
initialInterval: 1000
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
retry:
|
||||
attempts: 3
|
||||
initialInterval: 1000
|
||||
|
||||
- it: should fail with missing attempts
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: retry
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (retry) - Expected [attempts] to be set
|
||||
@@ -0,0 +1,57 @@
|
||||
suite: stripPrefix middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: strip-prefix
|
||||
data:
|
||||
forceSlash: true
|
||||
prefix:
|
||||
- /some-prefix
|
||||
- /some-other-prefix
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
stripPrefix:
|
||||
forceSlash: true
|
||||
prefix:
|
||||
- /some-prefix
|
||||
- /some-other-prefix
|
||||
|
||||
- it: should fail with missing prefix
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: strip-prefix
|
||||
data:
|
||||
prefix: []
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (strip-prefix) - Expected [prefix] to be set
|
||||
|
||||
- it: should fail with invalid forceSlash
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: strip-prefix
|
||||
data:
|
||||
prefix:
|
||||
- /some-prefix
|
||||
forceSlash: some-value
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (strip-prefix) - Expected [forceSlash] to be a boolean, but got [string]
|
||||
@@ -0,0 +1,41 @@
|
||||
suite: stripPrefixRegex middleware test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should pass with all set
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: strip-prefix-regex
|
||||
data:
|
||||
regex:
|
||||
- some-regex
|
||||
- some-other-regex
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: spec
|
||||
value:
|
||||
stripPrefixRegex:
|
||||
regex:
|
||||
- some-regex
|
||||
- some-other-regex
|
||||
|
||||
- it: should fail with missing regex
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: strip-prefix-regex
|
||||
data:
|
||||
regex: []
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware (strip-prefix-regex) - Expected [regex] to be set
|
||||
@@ -0,0 +1,57 @@
|
||||
suite: middleware name test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should generate correct name
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware1:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
foo: bar
|
||||
my-middleware2:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
foo: bar
|
||||
my-middleware3:
|
||||
enabled: true
|
||||
type: buffering
|
||||
expandObjectName: false
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- documentIndex: &middlewareDoc 0
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *middlewareDoc
|
||||
isAPIVersion:
|
||||
of: traefik.io/v1alpha1
|
||||
- documentIndex: *middlewareDoc
|
||||
equal:
|
||||
path: metadata.name
|
||||
value: test-release-name-common-test-my-middleware1
|
||||
- documentIndex: &otherMiddlewareDoc 1
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *otherMiddlewareDoc
|
||||
isAPIVersion:
|
||||
of: traefik.io/v1alpha1
|
||||
- documentIndex: *otherMiddlewareDoc
|
||||
equal:
|
||||
path: metadata.name
|
||||
value: test-release-name-common-test-my-middleware2
|
||||
- documentIndex: &otherMiddlewareDoc2 2
|
||||
isKind:
|
||||
of: Middleware
|
||||
- documentIndex: *otherMiddlewareDoc2
|
||||
isAPIVersion:
|
||||
of: traefik.io/v1alpha1
|
||||
- documentIndex: *otherMiddlewareDoc2
|
||||
equal:
|
||||
path: metadata.name
|
||||
value: my-middleware3
|
||||
@@ -0,0 +1,103 @@
|
||||
suite: middleware validation test
|
||||
templates:
|
||||
- common.yaml
|
||||
release:
|
||||
name: test-release-name
|
||||
namespace: test-release-namespace
|
||||
tests:
|
||||
- it: should fail with name longer than 253 characters
|
||||
set:
|
||||
middlewares:
|
||||
? my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-long-long-long-long-long-long-long-name
|
||||
: enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Name [test-release-name-common-test-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-long-long-long-long-long-long-long-name] is not valid. Must start and end with an alphanumeric lowercase character. It can contain '-'. And must be at most 253 characters.
|
||||
|
||||
- it: should fail with name starting with underscore
|
||||
set:
|
||||
middlewares:
|
||||
_my-middleware:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Name [test-release-name-common-test-_my-middleware] is not valid. Must start and end with an alphanumeric lowercase character. It can contain '-'. And must be at most 253 characters.
|
||||
|
||||
- it: should fail with namespace longer than 63 characters
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware:
|
||||
enabled: true
|
||||
type: buffering
|
||||
namespace: my-extra-super-duper-long-name-that-is-longer-than-63-characters
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware - Namespace [my-extra-super-duper-long-name-that-is-longer-than-63-characters] is not valid. Must start and end with an alphanumeric lowercase character. It can contain '-'. And must be at most 63 characters.
|
||||
|
||||
- it: should fail with labels not a dict
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware:
|
||||
enabled: true
|
||||
type: buffering
|
||||
labels: "not a dict"
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware - Expected [labels] to be a dictionary, but got [string]
|
||||
|
||||
- it: should fail with annotations not a dict
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware:
|
||||
enabled: true
|
||||
type: buffering
|
||||
annotations: "not a dict"
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware - Expected [annotations] to be a dictionary, but got [string]
|
||||
|
||||
- it: should fail with data not a dict
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware:
|
||||
enabled: true
|
||||
type: buffering
|
||||
data: "not a dict"
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware - Expected [data] to be a dictionary, but got [string]
|
||||
|
||||
- it: should fail with empty enabled
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware:
|
||||
enabled:
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware - Expected the defined key [enabled] in [middlewares.my-middleware] to not be empty
|
||||
|
||||
- it: should fail with empty type
|
||||
set:
|
||||
middlewares:
|
||||
my-middleware:
|
||||
enabled: true
|
||||
type:
|
||||
data:
|
||||
foo: bar
|
||||
asserts:
|
||||
- failedTemplate:
|
||||
errorMessage: Middleware - Expected [type] to be set
|
||||
Reference in New Issue
Block a user