mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			35 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
|  | package pluginscdn | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"testing" | ||
|  | 
 | ||
|  | 	"github.com/stretchr/testify/require" | ||
|  | ) | ||
|  | 
 | ||
|  | func TestURLConstructor_StringURLFor(t *testing.T) { | ||
|  | 	uc := URLConstructor{ | ||
|  | 		cdnURLTemplate: "https://the.cdn/{id}/{version}/{assetPath}", | ||
|  | 		pluginID:       "the-plugin", | ||
|  | 		pluginVersion:  "0.1", | ||
|  | 	} | ||
|  | 	type tc struct { | ||
|  | 		name string | ||
|  | 		path string | ||
|  | 		exp  string | ||
|  | 	} | ||
|  | 	for _, c := range []tc{ | ||
|  | 		{"simple", "file.txt", "https://the.cdn/the-plugin/0.1/file.txt"}, | ||
|  | 		{"multiple", "some/path/to/file.txt", "https://the.cdn/the-plugin/0.1/some/path/to/file.txt"}, | ||
|  | 		{"path traversal", "some/../to/file.txt", "https://the.cdn/the-plugin/0.1/to/file.txt"}, | ||
|  | 		{"above root", "../../../../../file.txt", "https://the.cdn/the-plugin/0.1/file.txt"}, | ||
|  | 		{"multiple slashes", "some/////file.txt", "https://the.cdn/the-plugin/0.1/some/file.txt"}, | ||
|  | 		{"dots", "some/././././file.txt", "https://the.cdn/the-plugin/0.1/some/file.txt"}, | ||
|  | 	} { | ||
|  | 		t.Run(c.name, func(t *testing.T) { | ||
|  | 			u, err := uc.StringPath(c.path) | ||
|  | 			require.NoError(t, err) | ||
|  | 			require.Equal(t, c.exp, u) | ||
|  | 		}) | ||
|  | 	} | ||
|  | } |