package web

import (
	"net"
	"strings"
	"testing"

	"github.com/valyala/fasthttp"
)

func TestClientIp(t *testing.T) {

	t.Run("extract ip from header 'X-Forwarded-For'", func(t *testing.T) {
		ctx := fasthttp.RequestCtx{}
		ctx.Request.Header.Add("X-Forwarded-For", "1.2.3.4,5.6.7.8")
		ip := ClientIP(&ctx)
		if ip != "1.2.3.4" {
			t.Errorf("got %s, want %s", ip, "1.2.3.4")
		}
	})

	t.Run("extract ip from header 'X-Real-Ip'", func(t *testing.T) {
		ctx := fasthttp.RequestCtx{}
		ctx.Request.Header.Add("X-Real-Ip", "1.2.3.4")
		ip := ClientIP(&ctx)
		if ip != "1.2.3.4" {
			t.Errorf("got %s, want %s", ip, "1.2.3.4")
		}
	})

	t.Run("get ip from remoteAddr", func(t *testing.T) {
		ctx := fasthttp.RequestCtx{}
		realIp, _, err := net.SplitHostPort(strings.TrimSpace(ctx.RemoteAddr().String()))
		if err != nil {
			t.Fatalf("%s", err)
		}
		ip := ClientIP(&ctx)
		if ip != realIp {
			t.Errorf("got %s, want %s", ip, realIp)
		}
	})
}
