permissionpolicy_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package permissionpolicy_test
  2. import (
  3. "net/http/httptest"
  4. "strings"
  5. "testing"
  6. "imuslab.com/zoraxy/mod/dynamicproxy/permissionpolicy"
  7. )
  8. func TestInjectPermissionPolicyHeader(t *testing.T) {
  9. tests := []struct {
  10. name string
  11. existingHeader string
  12. policy *permissionpolicy.PermissionsPolicy
  13. expectedHeader string
  14. }{
  15. {
  16. name: "No existing policy, valid PermissionsPolicy",
  17. existingHeader: "",
  18. policy: &permissionpolicy.PermissionsPolicy{
  19. Geolocation: []string{"self"},
  20. Microphone: []string{"https://example.com"},
  21. Camera: []string{"*"},
  22. },
  23. expectedHeader: "camera=*, geolocation=(self), microphone=(https://example.com)",
  24. },
  25. {
  26. name: "Existing Permissions-Policy header should not be overwritten",
  27. existingHeader: "geolocation=(self), microphone=()",
  28. policy: &permissionpolicy.PermissionsPolicy{
  29. Geolocation: []string{"self"},
  30. Microphone: []string{"https://example.com"},
  31. Camera: []string{"*"},
  32. },
  33. expectedHeader: "geolocation=(self), microphone=()",
  34. },
  35. {
  36. name: "No policy provided",
  37. existingHeader: "",
  38. policy: nil,
  39. expectedHeader: "",
  40. },
  41. {
  42. name: "Empty PermissionsPolicy",
  43. existingHeader: "",
  44. policy: &permissionpolicy.PermissionsPolicy{},
  45. expectedHeader: "",
  46. },
  47. }
  48. for _, tt := range tests {
  49. t.Run(tt.name, func(t *testing.T) {
  50. rr := httptest.NewRecorder()
  51. if tt.existingHeader != "" {
  52. rr.Header().Set("Permissions-Policy", tt.existingHeader)
  53. }
  54. permissionpolicy.InjectPermissionPolicyHeader(rr, tt.policy)
  55. gotHeader := rr.Header().Get("Permissions-Policy")
  56. if !strings.Contains(gotHeader, tt.expectedHeader) {
  57. t.Errorf("got header %s, want %s", gotHeader, tt.expectedHeader)
  58. }
  59. })
  60. }
  61. }