mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-11-10 08:20:35 +08:00
423 lines
11 KiB
Go
423 lines
11 KiB
Go
package cloudflare
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var (
|
|
deviceSettingsPolicyID = "a842fa8a-a583-482e-9cd9-eb43362949fd"
|
|
deviceSettingsPolicyMatch = "identity.email == \"test@example.com\""
|
|
deviceSettingsPolicyPrecedence = 10
|
|
|
|
defaultDeviceSettingsPolicy = DeviceSettingsPolicy{
|
|
ServiceModeV2: &ServiceModeV2{
|
|
Mode: "warp",
|
|
},
|
|
DisableAutoFallback: BoolPtr(false),
|
|
FallbackDomains: &[]FallbackDomain{
|
|
{Suffix: "invalid"},
|
|
{Suffix: "test"},
|
|
},
|
|
Exclude: &[]SplitTunnel{
|
|
{Address: "10.0.0.0/8"},
|
|
{Address: "100.64.0.0/10"},
|
|
},
|
|
GatewayUniqueID: StringPtr("t1235"),
|
|
SupportURL: StringPtr(""),
|
|
CaptivePortal: IntPtr(180),
|
|
AllowModeSwitch: BoolPtr(false),
|
|
SwitchLocked: BoolPtr(false),
|
|
AllowUpdates: BoolPtr(false),
|
|
AutoConnect: IntPtr(0),
|
|
AllowedToLeave: BoolPtr(true),
|
|
Enabled: BoolPtr(true),
|
|
PolicyID: nil,
|
|
Name: nil,
|
|
Match: nil,
|
|
Precedence: nil,
|
|
Default: true,
|
|
ExcludeOfficeIps: BoolPtr(false),
|
|
Description: nil,
|
|
LANAllowMinutes: nil,
|
|
LANAllowSubnetSize: nil,
|
|
}
|
|
|
|
nonDefaultDeviceSettingsPolicy = DeviceSettingsPolicy{
|
|
ServiceModeV2: &ServiceModeV2{
|
|
Mode: "warp",
|
|
},
|
|
DisableAutoFallback: BoolPtr(false),
|
|
FallbackDomains: &[]FallbackDomain{
|
|
{Suffix: "invalid"},
|
|
{Suffix: "test"},
|
|
},
|
|
Exclude: &[]SplitTunnel{
|
|
{Address: "10.0.0.0/8"},
|
|
{Address: "100.64.0.0/10"},
|
|
},
|
|
GatewayUniqueID: StringPtr("t1235"),
|
|
SupportURL: StringPtr(""),
|
|
CaptivePortal: IntPtr(180),
|
|
AllowModeSwitch: BoolPtr(false),
|
|
SwitchLocked: BoolPtr(false),
|
|
AllowUpdates: BoolPtr(false),
|
|
AutoConnect: IntPtr(0),
|
|
AllowedToLeave: BoolPtr(true),
|
|
PolicyID: &deviceSettingsPolicyID,
|
|
Enabled: BoolPtr(true),
|
|
Name: StringPtr("test"),
|
|
Match: &deviceSettingsPolicyMatch,
|
|
Precedence: &deviceSettingsPolicyPrecedence,
|
|
Default: false,
|
|
ExcludeOfficeIps: BoolPtr(true),
|
|
Description: StringPtr("Test Description"),
|
|
LANAllowMinutes: UintPtr(120),
|
|
LANAllowSubnetSize: UintPtr(31),
|
|
}
|
|
|
|
defaultDeviceSettingsPolicyJson = `{
|
|
"service_mode_v2": {
|
|
"mode": "warp"
|
|
},
|
|
"disable_auto_fallback": false,
|
|
"fallback_domains": [
|
|
{
|
|
"suffix": "invalid"
|
|
},
|
|
{
|
|
"suffix": "test"
|
|
}
|
|
],
|
|
"exclude": [
|
|
{
|
|
"address": "10.0.0.0/8"
|
|
},
|
|
{
|
|
"address": "100.64.0.0/10"
|
|
}
|
|
],
|
|
"gateway_unique_id": "t1235",
|
|
"support_url": "",
|
|
"captive_portal": 180,
|
|
"allow_mode_switch": false,
|
|
"switch_locked": false,
|
|
"allow_updates": false,
|
|
"auto_connect": 0,
|
|
"allowed_to_leave": true,
|
|
"enabled": true,
|
|
"default": true,
|
|
"exclude_office_ips":false
|
|
}`
|
|
|
|
nonDefaultDeviceSettingsPolicyJson = fmt.Sprintf(`{
|
|
"service_mode_v2": {
|
|
"mode": "warp"
|
|
},
|
|
"disable_auto_fallback": false,
|
|
"fallback_domains": [
|
|
{
|
|
"suffix": "invalid"
|
|
},
|
|
{
|
|
"suffix": "test"
|
|
}
|
|
],
|
|
"exclude": [
|
|
{
|
|
"address": "10.0.0.0/8"
|
|
},
|
|
{
|
|
"address": "100.64.0.0/10"
|
|
}
|
|
],
|
|
"gateway_unique_id": "t1235",
|
|
"support_url": "",
|
|
"captive_portal": 180,
|
|
"allow_mode_switch": false,
|
|
"switch_locked": false,
|
|
"allow_updates": false,
|
|
"auto_connect": 0,
|
|
"allowed_to_leave": true,
|
|
"policy_id": "%s",
|
|
"enabled": true,
|
|
"name": "test",
|
|
"match": %#v,
|
|
"precedence": 10,
|
|
"default": false,
|
|
"exclude_office_ips":true,
|
|
"description":"Test Description",
|
|
"lan_allow_minutes": 120,
|
|
"lan_allow_subnet_size": 31
|
|
}`, deviceSettingsPolicyID, deviceSettingsPolicyMatch)
|
|
)
|
|
|
|
func TestUpdateDeviceClientCertificates(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPatch, r.Method, "Expected method 'PATCH', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": {"enabled": true}
|
|
}`)
|
|
}
|
|
|
|
want := DeviceClientCertificates{
|
|
Response: Response{
|
|
Success: true,
|
|
Errors: nil,
|
|
Messages: nil,
|
|
},
|
|
Result: Enabled{true},
|
|
}
|
|
|
|
mux.HandleFunc("/zones/"+testZoneID+"/devices/policy/certificates", handler)
|
|
|
|
actual, err := client.UpdateDeviceClientCertificates(context.Background(), ZoneIdentifier(testZoneID), UpdateDeviceClientCertificatesParams{Enabled: BoolPtr(true)})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, want, actual)
|
|
}
|
|
}
|
|
|
|
func TestGetDeviceClientCertificates(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": {"enabled": false}
|
|
}`)
|
|
}
|
|
|
|
want := DeviceClientCertificates{
|
|
Response: Response{
|
|
Success: true,
|
|
Errors: nil,
|
|
Messages: nil,
|
|
},
|
|
Result: Enabled{false},
|
|
}
|
|
|
|
mux.HandleFunc("/zones/"+testZoneID+"/devices/policy/certificates", handler)
|
|
|
|
actual, err := client.GetDeviceClientCertificates(context.Background(), ZoneIdentifier(testZoneID), GetDeviceClientCertificatesParams{})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, want, actual)
|
|
}
|
|
}
|
|
|
|
func TestCreateDeviceSettingsPolicy(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": %s
|
|
}`, nonDefaultDeviceSettingsPolicyJson)
|
|
}
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/devices/policy", handler)
|
|
|
|
actual, err := client.CreateDeviceSettingsPolicy(context.Background(), AccountIdentifier(testAccountID), CreateDeviceSettingsPolicyParams{
|
|
Precedence: IntPtr(10),
|
|
Match: &deviceSettingsPolicyMatch,
|
|
Name: StringPtr("test"),
|
|
Description: StringPtr("Test Description"),
|
|
LANAllowMinutes: UintPtr(120),
|
|
LANAllowSubnetSize: UintPtr(31),
|
|
})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, nonDefaultDeviceSettingsPolicy, actual)
|
|
}
|
|
}
|
|
|
|
func TestUpdateDefaultDeviceSettingsPolicy(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPatch, r.Method, "Expected method 'PATCH', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": %s
|
|
}`, defaultDeviceSettingsPolicyJson)
|
|
}
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/devices/policy", handler)
|
|
|
|
actual, err := client.UpdateDefaultDeviceSettingsPolicy(context.Background(), AccountIdentifier(testAccountID), UpdateDefaultDeviceSettingsPolicyParams{})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, defaultDeviceSettingsPolicy, actual)
|
|
}
|
|
}
|
|
|
|
func TestUpdateDeviceSettingsPolicy(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPatch, r.Method, "Expected method 'PATCH', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": %s
|
|
}`, nonDefaultDeviceSettingsPolicyJson)
|
|
}
|
|
|
|
precedence := 10
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/devices/policy/"+deviceSettingsPolicyID, handler)
|
|
|
|
actual, err := client.UpdateDeviceSettingsPolicy(context.Background(), AccountIdentifier(testAccountID), UpdateDeviceSettingsPolicyParams{
|
|
PolicyID: &deviceSettingsPolicyID,
|
|
Precedence: &precedence,
|
|
})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, nonDefaultDeviceSettingsPolicy, actual)
|
|
}
|
|
}
|
|
|
|
func TestDeleteDeviceSettingsPolicy(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodDelete, r.Method, "Expected method 'DELETE', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": [ %s ]
|
|
}`, defaultDeviceSettingsPolicyJson)
|
|
}
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/devices/policy/"+deviceSettingsPolicyID, handler)
|
|
|
|
actual, err := client.DeleteDeviceSettingsPolicy(context.Background(), AccountIdentifier(testAccountID), deviceSettingsPolicyID)
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, []DeviceSettingsPolicy{defaultDeviceSettingsPolicy}, actual)
|
|
}
|
|
}
|
|
|
|
func TestGetDefaultDeviceSettings(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": %s
|
|
}`, defaultDeviceSettingsPolicyJson)
|
|
}
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/devices/policy", handler)
|
|
|
|
actual, err := client.GetDefaultDeviceSettingsPolicy(context.Background(), AccountIdentifier(testAccountID), GetDefaultDeviceSettingsPolicyParams{})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, defaultDeviceSettingsPolicy, actual)
|
|
}
|
|
}
|
|
|
|
func TestGetDeviceSettings(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": %s
|
|
}`, nonDefaultDeviceSettingsPolicyJson)
|
|
}
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/devices/policy/"+deviceSettingsPolicyID, handler)
|
|
|
|
actual, err := client.GetDeviceSettingsPolicy(context.Background(), AccountIdentifier(testAccountID), GetDeviceSettingsPolicyParams{PolicyID: &deviceSettingsPolicyID})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, nonDefaultDeviceSettingsPolicy, actual)
|
|
}
|
|
}
|
|
|
|
func TestListDeviceSettingsPolicies(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `{
|
|
"success": true,
|
|
"errors": null,
|
|
"messages": null,
|
|
"result": [%s],
|
|
"result_info": {
|
|
"count": 1,
|
|
"page": 1,
|
|
"per_page": 20,
|
|
"total_count": 1
|
|
}
|
|
}`, nonDefaultDeviceSettingsPolicyJson)
|
|
}
|
|
|
|
want := []DeviceSettingsPolicy{nonDefaultDeviceSettingsPolicy}
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/devices/policies", handler)
|
|
|
|
actual, resultInfo, err := client.ListDeviceSettingsPolicies(context.Background(), AccountIdentifier(testAccountID), ListDeviceSettingsPoliciesParams{
|
|
ResultInfo: ResultInfo{
|
|
Page: 1,
|
|
PerPage: 20,
|
|
},
|
|
})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, want, actual)
|
|
assert.Equal(t, &ResultInfo{
|
|
Count: 1,
|
|
Page: 1,
|
|
PerPage: 20,
|
|
Total: 1,
|
|
}, resultInfo)
|
|
assert.Len(t, actual, 1)
|
|
}
|
|
}
|