// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package mediaproxy // import "miniflux.app/v2/internal/mediaproxy" import ( "os" "testing" "miniflux.app/v2/internal/config" ) func TestRewriteDocumentWithRelativeProxyURL_None_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "none") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_None_Audio(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "none") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "audio") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_None_Video(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "none") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_None_VideoPoster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "none") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_None_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "none") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_None_Audio(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "none") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "audio") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_None_Video(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "none") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_None_VideoPoster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "none") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Audio(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "audio") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Video(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_VideoPoster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_HttpOnly_Image_Poster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Audio(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "audio") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_Video(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_HttpOnly_VideoPoster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_All_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_All_Audio(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "audio") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_All_Video(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_All_VideoPoster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_All_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_All_Audio(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "audio") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_All_Video(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_All_VideoPoster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Audio(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "audio") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_BasePath_All_Video(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_BasePath_All_VideoPoster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Audio(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "audio") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_Video(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_BasePath_All_VideoPoster(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "video") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("BASE_URL", "http://example.org:88/folder/") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithRelativeProxyURL_CustomMediaProxy_All_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("MEDIA_PROXY_CUSTOM_URL", "https://proxy-example/proxy") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithRelativeProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestRewriteDocumentWithAbsoluteProxyURL_CustomMediaProxy_All_Image(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") os.Setenv("MEDIA_PROXY_CUSTOM_URL", "https://proxy-example/proxy") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Config parsing failure: %v`, err) } input := `

Test

` output := RewriteDocumentWithAbsoluteProxyURL(input) expected := `

Test

` if expected != output { t.Errorf(`Not expected output: got %q instead of %q`, output, expected) } } func TestMediaProxyWithIncorrectCustomMediaProxy(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_CUSTOM_URL", "http://:8080example.com") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err == nil { t.Fatalf(`Incorrect proxy URL silently accepted (MEDIA_PROXY_CUSTOM_URL=%q): %q`, os.Getenv("MEDIA_PROXY_CUSTOM_URL"), config.Opts.MediaCustomProxyURL()) } } func TestMediaProxyFilterWithImageSrcset(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Parsing failure: %v`, err) } input := `

test

` expected := `

test

` output := RewriteDocumentWithRelativeProxyURL(input) if expected != output { t.Errorf(`Not expected output: got %s`, output) } } func TestMediaProxyFilterWithEmptySrcset(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Parsing failure: %v`, err) } input := `

test

` expected := `

test

` output := RewriteDocumentWithRelativeProxyURL(input) if expected != output { t.Errorf(`Not expected output: got %s`, output) } } func TestProxyFilterWithPictureSource(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Parsing failure: %v`, err) } input := `` expected := `` output := RewriteDocumentWithRelativeProxyURL(input) if expected != output { t.Errorf(`Not expected output: got %s`, output) } } func TestProxyFilterOnlyNonHTTPWithPictureSource(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "http-only") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") os.Setenv("MEDIA_PROXY_PRIVATE_KEY", "test") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Parsing failure: %v`, err) } input := `` expected := `` output := RewriteDocumentWithRelativeProxyURL(input) if expected != output { t.Errorf(`Not expected output: got %s`, output) } } func TestMediaProxyWithImageDataURL(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Parsing failure: %v`, err) } input := `` expected := `` output := RewriteDocumentWithRelativeProxyURL(input) if expected != output { t.Errorf(`Not expected output: got %s`, output) } } func TestMediaProxyWithImageSourceDataURL(t *testing.T) { os.Clearenv() os.Setenv("MEDIA_PROXY_MODE", "all") os.Setenv("MEDIA_PROXY_RESOURCE_TYPES", "image") var err error parser := config.NewConfigParser() config.Opts, err = parser.ParseEnvironmentVariables() if err != nil { t.Fatalf(`Parsing failure: %v`, err) } input := `` expected := `` output := RewriteDocumentWithRelativeProxyURL(input) if expected != output { t.Errorf(`Not expected output: got %s`, output) } } func TestShouldProxifyURLWithMimeType(t *testing.T) { testCases := []struct { name string mediaURL string mediaMimeType string mediaProxyOption string mediaProxyResourceTypes []string expected bool }{ { name: "Empty URL should not be proxified", mediaURL: "", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "Data URL should not be proxified", mediaURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==", mediaMimeType: "image/png", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "HTTP URL with all mode and matching MIME type should be proxified", mediaURL: "http://example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: true, }, { name: "HTTPS URL with all mode and matching MIME type should be proxified", mediaURL: "https://example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: true, }, { name: "HTTP URL with http-only mode and matching MIME type should be proxified", mediaURL: "http://example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "http-only", mediaProxyResourceTypes: []string{"image"}, expected: true, }, { name: "HTTPS URL with http-only mode should not be proxified", mediaURL: "https://example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "http-only", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "URL with none mode should not be proxified", mediaURL: "http://example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "none", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "URL with matching MIME type should be proxified", mediaURL: "http://example.com/video.mp4", mediaMimeType: "video/mp4", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"video"}, expected: true, }, { name: "URL with non-matching MIME type should not be proxified", mediaURL: "http://example.com/video.mp4", mediaMimeType: "video/mp4", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "URL with multiple resource types and matching MIME type should be proxified", mediaURL: "http://example.com/audio.mp3", mediaMimeType: "audio/mp3", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image", "audio", "video"}, expected: true, }, { name: "URL with multiple resource types but non-matching MIME type should not be proxified", mediaURL: "http://example.com/document.pdf", mediaMimeType: "application/pdf", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image", "audio", "video"}, expected: false, }, { name: "URL with empty resource types should not be proxified", mediaURL: "http://example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{}, expected: false, }, { name: "Relative URL should not be proxified", mediaURL: "/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "Protocol-relative URL should not be proxified", mediaURL: "//cdn.example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "Unsupported scheme should not be proxified", mediaURL: "ftp://example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "Blob URL should not be proxified", mediaURL: "blob:https://example.com/123", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: false, }, { name: "URL with partial MIME type match should be proxified", mediaURL: "http://example.com/image.jpg", mediaMimeType: "image/jpeg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: true, }, { name: "URL with uppercase MIME type should be proxified", mediaURL: "http://example.com/image.jpg", mediaMimeType: "Image/JPEG", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"image"}, expected: true, }, { name: "URL with audio MIME type and audio resource type should be proxified", mediaURL: "http://example.com/song.ogg", mediaMimeType: "audio/ogg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"audio"}, expected: true, }, { name: "URL with mixed-case audio MIME type should be proxified", mediaURL: "http://example.com/song.ogg", mediaMimeType: "AuDiO/Ogg", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"audio"}, expected: true, }, { name: "URL with video MIME type and video resource type should be proxified", mediaURL: "http://example.com/movie.webm", mediaMimeType: "video/webm", mediaProxyOption: "all", mediaProxyResourceTypes: []string{"video"}, expected: true, }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { result := ShouldProxifyURLWithMimeType(tc.mediaURL, tc.mediaMimeType, tc.mediaProxyOption, tc.mediaProxyResourceTypes) if result != tc.expected { t.Errorf("Expected %v, got %v for URL: %s, MIME type: %s, proxy option: %s, resource types: %v", tc.expected, result, tc.mediaURL, tc.mediaMimeType, tc.mediaProxyOption, tc.mediaProxyResourceTypes) } }) } }