rule_nested_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package option
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/sagernet/sing/common/json"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestRuleRejectsNestedDefaultRuleAction(t *testing.T) {
  9. t.Parallel()
  10. var rule Rule
  11. err := json.UnmarshalContext(context.Background(), []byte(`{
  12. "type": "logical",
  13. "mode": "and",
  14. "rules": [
  15. {"domain": "example.com", "outbound": "direct"}
  16. ]
  17. }`), &rule)
  18. require.ErrorContains(t, err, RouteRuleActionNestedUnsupportedMessage)
  19. }
  20. func TestRuleLeavesUnknownNestedKeysToNormalValidation(t *testing.T) {
  21. t.Parallel()
  22. var rule Rule
  23. err := json.UnmarshalContext(context.Background(), []byte(`{
  24. "type": "logical",
  25. "mode": "and",
  26. "rules": [
  27. {"domain": "example.com", "foo": "bar"}
  28. ]
  29. }`), &rule)
  30. require.ErrorContains(t, err, "unknown field")
  31. require.NotContains(t, err.Error(), RouteRuleActionNestedUnsupportedMessage)
  32. }
  33. func TestDNSRuleRejectsNestedDefaultRuleAction(t *testing.T) {
  34. t.Parallel()
  35. var rule DNSRule
  36. err := json.UnmarshalContext(context.Background(), []byte(`{
  37. "type": "logical",
  38. "mode": "and",
  39. "rules": [
  40. {"domain": "example.com", "server": "default"}
  41. ]
  42. }`), &rule)
  43. require.ErrorContains(t, err, DNSRuleActionNestedUnsupportedMessage)
  44. }
  45. func TestDNSRuleLeavesUnknownNestedKeysToNormalValidation(t *testing.T) {
  46. t.Parallel()
  47. var rule DNSRule
  48. err := json.UnmarshalContext(context.Background(), []byte(`{
  49. "type": "logical",
  50. "mode": "and",
  51. "rules": [
  52. {"domain": "example.com", "foo": "bar"}
  53. ]
  54. }`), &rule)
  55. require.ErrorContains(t, err, "unknown field")
  56. require.NotContains(t, err.Error(), DNSRuleActionNestedUnsupportedMessage)
  57. }