mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
package web
 | 
						|
 | 
						|
import (
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
 | 
						|
	"github.com/grafana/grafana/pkg/infra/log"
 | 
						|
)
 | 
						|
 | 
						|
func TestContext_RemoteAddr(t *testing.T) {
 | 
						|
	type fields struct {
 | 
						|
		Req    *http.Request
 | 
						|
		logger log.Logger
 | 
						|
	}
 | 
						|
	tests := []struct {
 | 
						|
		name   string
 | 
						|
		fields fields
 | 
						|
		want   string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name: "Receive invalid ip address in headers should return RemoteAddr",
 | 
						|
			fields: fields{
 | 
						|
				logger: log.New("test.logger"),
 | 
						|
				Req: &http.Request{
 | 
						|
					RemoteAddr: "255.255.255.255",
 | 
						|
					Header: http.Header{
 | 
						|
						"X-Real-Ip":       []string{"this is not a valid IP"},
 | 
						|
						"X-Forwarded-For": []string{"192.168.1.1"},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			want: "255.255.255.255",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "Receive valid ip address in X-Real-Ip should return it",
 | 
						|
			fields: fields{
 | 
						|
				logger: log.New("test.logger"),
 | 
						|
				Req: &http.Request{
 | 
						|
					RemoteAddr: "255.255.255.255",
 | 
						|
					Header: http.Header{
 | 
						|
						"X-Real-Ip":       []string{"192.168.1.1"},
 | 
						|
						"X-Forwarded-For": []string{"this is not a valid IP"},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			want: "192.168.1.1",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "Receive valid ip addresses in X-Forwarded-For should return the first one",
 | 
						|
			fields: fields{
 | 
						|
				logger: log.New("test.logger"),
 | 
						|
				Req: &http.Request{
 | 
						|
					RemoteAddr: "255.255.255.255",
 | 
						|
					Header: http.Header{
 | 
						|
						"X-Forwarded-For": []string{"192.168.1.1,255.255.255.255"},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			want: "192.168.1.1",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "Receive valid ip addresses IPV6 in X-Forwarded-For should return it",
 | 
						|
			fields: fields{
 | 
						|
				logger: log.New("test.logger"),
 | 
						|
				Req: &http.Request{
 | 
						|
					RemoteAddr: "255.255.255.255",
 | 
						|
					Header: http.Header{
 | 
						|
						"X-Forwarded-For": []string{"2001:db8:85a3:8d3:1319:8a2e:370:7348"},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			want: "2001:db8:85a3:8d3:1319:8a2e:370:7348",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "When no header is informed, should return remote_addr without port",
 | 
						|
			fields: fields{
 | 
						|
				logger: log.New("test.logger"),
 | 
						|
				Req: &http.Request{
 | 
						|
					RemoteAddr: "[::1]:51299",
 | 
						|
					Header:     http.Header{},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			want: "[::1]",
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			ctx := &Context{
 | 
						|
				Req: tt.fields.Req,
 | 
						|
			}
 | 
						|
			if got := ctx.RemoteAddr(); got != tt.want {
 | 
						|
				t.Errorf("RemoteAddr() = %v, want %v", got, tt.want)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContext_noHandler(t *testing.T) {
 | 
						|
	recorder := httptest.NewRecorder()
 | 
						|
 | 
						|
	method := http.MethodGet
 | 
						|
	c := &Context{
 | 
						|
		Req:  httptest.NewRequest(method, "/", nil),
 | 
						|
		Resp: NewResponseWriter(method, recorder),
 | 
						|
	}
 | 
						|
 | 
						|
	c.run()
 | 
						|
 | 
						|
	assert.Equal(t, http.StatusInternalServerError, recorder.Code)
 | 
						|
}
 |