Skip to content

Commit

Permalink
feat(product_enablement): Add support for NGWAF.
Browse files Browse the repository at this point in the history
  • Loading branch information
kpfleming committed Sep 30, 2024
1 parent 12cae3b commit febabd2
Show file tree
Hide file tree
Showing 6 changed files with 303 additions and 0 deletions.
43 changes: 43 additions & 0 deletions fastly/fixtures/product_enablement/disable_ngwaf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
version: 1
interactions:
- request:
body: ""
form: {}
headers:
User-Agent:
- FastlyGo/7.2.0 (+github.com/fastly/go-fastly; go1.18.5)
url: https://api.fastly.com/enabled-products/ngwaf/services/7i6HN3TK9wS159v2gPAZ8A
method: DELETE
response:
body: ""
headers:
Accept-Ranges:
- bytes
Content-Type:
- application/json
Date:
- Fri, 17 Feb 2023 15:08:02 GMT
Fastly-Ratelimit-Remaining:
- "998"
Fastly-Ratelimit-Reset:
- "1676649600"
Status:
- 204 No Content
Strict-Transport-Security:
- max-age=31536000
Vary:
- Accept-Encoding
Via:
- 1.1 varnish, 1.1 varnish
X-Cache:
- MISS, MISS
X-Cache-Hits:
- 0, 0
X-Served-By:
- cache-control-cp-aws-us-east-2-prod-7-CONTROL-AWS-UE2, cache-lhr7368-LHR
X-Timer:
- S1676646482.821386,VS0,VE327
status: 204 No Content
code: 204
duration: ""
52 changes: 52 additions & 0 deletions fastly/fixtures/product_enablement/enable_ngwaf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
version: 1
interactions:
- request:
body: ProductID=ngwaf&ServiceID=7i6HN3TK9wS159v2gPAZ8A
form:
ProductID:
- ngwaf
ServiceID:
- 7i6HN3TK9wS159v2gPAZ8A
headers:
Content-Type:
- application/x-www-form-urlencoded
User-Agent:
- FastlyGo/7.2.0 (+github.com/fastly/go-fastly; go1.18.5)
url: https://api.fastly.com/enabled-products/ngwaf/services/7i6HN3TK9wS159v2gPAZ8A
method: PUT
response:
body: |
{"product":{"id":"ngwaf","object":"product"},"service":{"id":"7i6HN3TK9wS159v2gPAZ8A","object":"service"},"_links":{"self":"/enabled-products/ngwaf/services/7i6HN3TK9wS159v2gPAZ8A"}}
headers:
Accept-Ranges:
- bytes
Content-Length:
- "209"
Content-Type:
- application/json
Date:
- Fri, 17 Feb 2023 15:08:01 GMT
Fastly-Ratelimit-Remaining:
- "999"
Fastly-Ratelimit-Reset:
- "1676649600"
Status:
- 200 OK
Strict-Transport-Security:
- max-age=31536000
Vary:
- Accept-Encoding
Via:
- 1.1 varnish, 1.1 varnish
X-Cache:
- MISS, MISS
X-Cache-Hits:
- 0, 0
X-Served-By:
- cache-control-cp-aws-us-east-2-prod-1-CONTROL-AWS-UE2, cache-lhr7368-LHR
X-Timer:
- S1676646481.093534,VS0,VE491
status: 200 OK
code: 200
duration: ""
42 changes: 42 additions & 0 deletions fastly/fixtures/product_enablement/get-disabled_ngwaf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
version: 1
interactions:
- request:
body: ""
form: {}
headers:
User-Agent:
- FastlyGo/7.2.0 (+github.com/fastly/go-fastly; go1.18.5)
url: https://api.fastly.com/enabled-products/ngwaf/services/7i6HN3TK9wS159v2gPAZ8A
method: GET
response:
body: |
{"type":"","title":"no product on service","status":400,"errors":null,"detail":""}
headers:
Accept-Ranges:
- bytes
Content-Length:
- "83"
Content-Type:
- application/json
Date:
- Fri, 17 Feb 2023 15:08:02 GMT
Status:
- 400 Bad Request
Strict-Transport-Security:
- max-age=31536000
Vary:
- Accept-Encoding
Via:
- 1.1 varnish, 1.1 varnish
X-Cache:
- MISS, MISS
X-Cache-Hits:
- 0, 0
X-Served-By:
- cache-control-cp-aws-us-east-2-prod-1-CONTROL-AWS-UE2, cache-lhr7368-LHR
X-Timer:
- S1676646482.180149,VS0,VE194
status: 400 Bad Request
code: 400
duration: ""
42 changes: 42 additions & 0 deletions fastly/fixtures/product_enablement/get_ngwaf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
version: 1
interactions:
- request:
body: ""
form: {}
headers:
User-Agent:
- FastlyGo/7.2.0 (+github.com/fastly/go-fastly; go1.18.5)
url: https://api.fastly.com/enabled-products/ngwaf/services/7i6HN3TK9wS159v2gPAZ8A
method: GET
response:
body: |
{"product":{"id":"ngwaf","object":"product"},"service":{"id":"7i6HN3TK9wS159v2gPAZ8A","object":"service"},"_links":{"self":"/enabled-products/ngwaf/services/7i6HN3TK9wS159v2gPAZ8A"}}
headers:
Accept-Ranges:
- bytes
Content-Length:
- "209"
Content-Type:
- application/json
Date:
- Fri, 17 Feb 2023 15:08:01 GMT
Status:
- 200 OK
Strict-Transport-Security:
- max-age=31536000
Vary:
- Accept-Encoding
Via:
- 1.1 varnish, 1.1 varnish
X-Cache:
- MISS, MISS
X-Cache-Hits:
- 0, 0
X-Served-By:
- cache-control-cp-aws-us-east-2-prod-2-CONTROL-AWS-UE2, cache-lhr7368-LHR
X-Timer:
- S1676646482.611546,VS0,VE190
status: 200 OK
code: 200
duration: ""
3 changes: 3 additions & 0 deletions fastly/product_enablement.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ func (p Product) String() string {
return "fanout"
case ProductImageOptimizer:
return "image_optimizer"
case ProductNGWAF:
return "ngwaf"
case ProductOriginInspector:
return "origin_inspector"
case ProductWebSockets:
Expand All @@ -45,6 +47,7 @@ const (
ProductDomainInspector
ProductFanout
ProductImageOptimizer
ProductNGWAF
ProductOriginInspector
ProductWebSockets
)
Expand Down
121 changes: 121 additions & 0 deletions fastly/product_enablement_ngwaf_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package fastly

import (
"testing"
)

func TestClient_ProductEnablement_ngwaf(t *testing.T) {
t.Parallel()

var err error

// Enable Product
var pe *ProductEnablement
record(t, "product_enablement/enable_ngwaf", func(c *Client) {
pe, err = c.EnableProduct(&ProductEnablementInput{
ProductID: ProductNGWAF,
ServiceID: testServiceID,
})
})
if err != nil {
t.Fatal(err)
}

if *pe.Product.ProductID != ProductNGWAF.String() {
t.Errorf("bad feature_revision: %s", *pe.Product.ProductID)
}

// Get Product status
var gpe *ProductEnablement
record(t, "product_enablement/get_ngwaf", func(c *Client) {
gpe, err = c.GetProduct(&ProductEnablementInput{
ProductID: ProductNGWAF,
ServiceID: testServiceID,
})
})
if err != nil {
t.Fatal(err)
}

if *gpe.Product.ProductID != ProductNGWAF.String() {
t.Errorf("bad feature_revision: %s", *gpe.Product.ProductID)
}

// Disable Product
record(t, "product_enablement/disable_ngwaf", func(c *Client) {
err = c.DisableProduct(&ProductEnablementInput{
ProductID: ProductNGWAF,
ServiceID: testServiceID,
})
})
if err != nil {
t.Fatal(err)
}

// Get Product status again to check disabled
record(t, "product_enablement/get-disabled_ngwaf", func(c *Client) {
gpe, err = c.GetProduct(&ProductEnablementInput{
ProductID: ProductNGWAF,
ServiceID: testServiceID,
})
})

// The API returns a 400 if Product is not enabled.
// The API client returns an error if a non-2xx is returned from the API.
if err == nil {
t.Fatal("expected a 400 from the API but got a 2xx")
}
}

func TestClient_GetProduct_validation_ngwaf(t *testing.T) {
var err error

_, err = testClient.GetProduct(&ProductEnablementInput{
ProductID: ProductNGWAF,
})
if err != ErrMissingServiceID {
t.Errorf("bad error: %s", err)
}

_, err = testClient.GetProduct(&ProductEnablementInput{
ServiceID: "foo",
})
if err != ErrMissingProductID {
t.Errorf("bad error: %s", err)
}
}

func TestClient_EnableProduct_validation_ngwaf(t *testing.T) {
var err error
_, err = testClient.EnableProduct(&ProductEnablementInput{
ProductID: ProductNGWAF,
})
if err != ErrMissingServiceID {
t.Errorf("bad error: %s", err)
}

_, err = testClient.EnableProduct(&ProductEnablementInput{
ServiceID: "foo",
})
if err != ErrMissingProductID {
t.Errorf("bad error: %s", err)
}
}

func TestClient_DisableProduct_validation_ngwaf(t *testing.T) {
var err error

err = testClient.DisableProduct(&ProductEnablementInput{
ProductID: ProductNGWAF,
})
if err != ErrMissingServiceID {
t.Errorf("bad error: %s", err)
}

err = testClient.DisableProduct(&ProductEnablementInput{
ServiceID: "foo",
})
if err != ErrMissingProductID {
t.Errorf("bad error: %s", err)
}
}

0 comments on commit febabd2

Please sign in to comment.