github.com/newrelic/go-agent@v3.26.0+incompatible/internal/security_policies_test.go (about)

     1  // Copyright 2020 New Relic Corporation. All rights reserved.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package internal
     5  
     6  import (
     7  	"encoding/json"
     8  	"testing"
     9  )
    10  
    11  func testBool(t *testing.T, name string, expected, got bool) {
    12  	if expected != got {
    13  		t.Errorf("%v: expected=%v got=%v", name, expected, got)
    14  	}
    15  }
    16  
    17  func TestSecurityPoliciesPresent(t *testing.T) {
    18  	inputJSON := []byte(`{
    19  		"record_sql":                    { "enabled": false, "required": false },
    20  	        "attributes_include":            { "enabled": false, "required": false },
    21  	        "allow_raw_exception_messages":  { "enabled": false, "required": false },
    22  	        "custom_events":                 { "enabled": false, "required": false },
    23  	        "custom_parameters":             { "enabled": false, "required": false },
    24  	        "custom_instrumentation_editor": { "enabled": false, "required": false },
    25  	        "message_parameters":            { "enabled": false, "required": false },
    26  	        "job_arguments":                 { "enabled": false, "required": false }
    27  	}`)
    28  	var policies SecurityPolicies
    29  	err := json.Unmarshal(inputJSON, &policies)
    30  	if nil != err {
    31  		t.Fatal(err)
    32  	}
    33  	connectJSON, err := json.Marshal(policies)
    34  	if nil != err {
    35  		t.Fatal(err)
    36  	}
    37  	expectJSON := CompactJSONString(`{
    38  		"record_sql":                      { "enabled": false },
    39  		"attributes_include":              { "enabled": false },
    40  		"allow_raw_exception_messages":    { "enabled": false },
    41  		"custom_events":                   { "enabled": false },
    42  		"custom_parameters":               { "enabled": false }
    43  	}`)
    44  	if string(connectJSON) != expectJSON {
    45  		t.Error(string(connectJSON), expectJSON)
    46  	}
    47  	testBool(t, "PointerIfPopulated", true, nil != policies.PointerIfPopulated())
    48  	testBool(t, "RecordSQLEnabled", false, policies.RecordSQL.Enabled())
    49  	testBool(t, "AttributesIncludeEnabled", false, policies.AttributesInclude.Enabled())
    50  	testBool(t, "AllowRawExceptionMessages", false, policies.AllowRawExceptionMessages.Enabled())
    51  	testBool(t, "CustomEventsEnabled", false, policies.CustomEvents.Enabled())
    52  	testBool(t, "CustomParametersEnabled", false, policies.CustomParameters.Enabled())
    53  }
    54  
    55  func TestNilSecurityPolicies(t *testing.T) {
    56  	var policies SecurityPolicies
    57  	testBool(t, "PointerIfPopulated", false, nil != policies.PointerIfPopulated())
    58  	testBool(t, "RecordSQLEnabled", true, policies.RecordSQL.Enabled())
    59  	testBool(t, "AttributesIncludeEnabled", true, policies.AttributesInclude.Enabled())
    60  	testBool(t, "AllowRawExceptionMessages", true, policies.AllowRawExceptionMessages.Enabled())
    61  	testBool(t, "CustomEventsEnabled", true, policies.CustomEvents.Enabled())
    62  	testBool(t, "CustomParametersEnabled", true, policies.CustomParameters.Enabled())
    63  }
    64  
    65  func TestUnknownRequiredPolicy(t *testing.T) {
    66  	inputJSON := []byte(`{
    67  		"record_sql":                    { "enabled": false, "required": false },
    68  	        "attributes_include":            { "enabled": false, "required": false },
    69  	        "allow_raw_exception_messages":  { "enabled": false, "required": false },
    70  	        "custom_events":                 { "enabled": false, "required": false },
    71  	        "custom_parameters":             { "enabled": false, "required": false },
    72  	        "custom_instrumentation_editor": { "enabled": false, "required": false },
    73  	        "message_parameters":            { "enabled": false, "required": false },
    74  	        "job_arguments":                 { "enabled": false, "required": false },
    75  		"unknown_policy":                { "enabled": false, "required": true  }
    76  	}`)
    77  	var policies SecurityPolicies
    78  	err := json.Unmarshal(inputJSON, &policies)
    79  	if nil == err {
    80  		t.Fatal(err)
    81  	}
    82  	testBool(t, "PointerIfPopulated", false, nil != policies.PointerIfPopulated())
    83  	testBool(t, "unknown required policy should be disconnect", true, isDisconnectSecurityPolicyError(err))
    84  }
    85  
    86  func TestSecurityPolicyMissing(t *testing.T) {
    87  	inputJSON := []byte(`{
    88  		"record_sql":                    { "enabled": false, "required": false },
    89  		"attributes_include":            { "enabled": false, "required": false },
    90  		"allow_raw_exception_messages":  { "enabled": false, "required": false },
    91  		"custom_events":                 { "enabled": false, "required": false },
    92  		"request_parameters":            { "enabled": false, "required": false }
    93  	}`)
    94  	var policies SecurityPolicies
    95  	err := json.Unmarshal(inputJSON, &policies)
    96  	_, ok := err.(errUnsetPolicy)
    97  	if !ok {
    98  		t.Fatal(err)
    99  	}
   100  	testBool(t, "PointerIfPopulated", false, nil != policies.PointerIfPopulated())
   101  	testBool(t, "missing policy should be disconnect", true, isDisconnectSecurityPolicyError(err))
   102  }
   103  
   104  func TestMalformedPolicies(t *testing.T) {
   105  	inputJSON := []byte(`{`)
   106  	var policies SecurityPolicies
   107  	err := json.Unmarshal(inputJSON, &policies)
   108  	if nil == err {
   109  		t.Fatal(err)
   110  	}
   111  	testBool(t, "malformed policies should not be disconnect", false, isDisconnectSecurityPolicyError(err))
   112  }