package main

import (
	"testing"
)

func TestPaketAlanlariKotuGirdi(t *testing.T) {
	ozet := "0000000000000000000000000000000000000000000000000000000000000000"
	kotu := []paketBilgisi{
		{Anahtar: "../x", Surum: "1.0.0", Sha256: ozet},
		{Anahtar: "ornek", Surum: "..", Sha256: ozet},
		{Anahtar: "ornek", Surum: "1.0.0", Sha256: "kisa"},
	}
	for _, p := range kotu {
		if err := paketAlanlariGecerli(p); err == nil {
			t.Fatalf("kotu alan kabul edildi: %+v", p)
		}
	}
}

func TestIndirmeAdresiSadeceFikoyt(t *testing.T) {
	for _, iyi := range []string{
		"https://fikoyt.com/eklenti/ornek.exe",
		"https://fikoyt.com:9000/eklenti/ornek/1.0.0/plugin.exe",
	} {
		if err := izinliIndirmeAdresi(iyi); err != nil {
			t.Fatalf("izinli adres reddedildi: %s: %v", iyi, err)
		}
	}
	for _, kotu := range []string{
		"http://fikoyt.com/a",
		"https://evil.com/a",
		"https://fikoyt.com.evil.com/a",
		"https://fikoyt.com.evil.com:9000/a",
		"ftp://fikoyt.com/a",
		"https://fikoyt.com:8443/a",
		"https://fikoyt.com:443/a",
		"https://fikoyt.com:9001/a",
		"https://user@evil.com/a",
		"https://fikoyt.com@evil.com/a",
	} {
		if err := izinliIndirmeAdresi(kotu); err == nil {
			t.Fatalf("izinsiz adres kabul edildi: %s", kotu)
		}
	}
}

// Dogrulama basarisizsa kurulum hicbir sey yazmamali ve hata donmeli.
func TestKurulumSahteImzaReddedilir(t *testing.T) {
	dosya := []byte("sahte ikili")
	p, anahtar := testPaket(t, dosya)
	onceki := paketAcikAnahtar
	paketAcikAnahtar = anahtar
	defer func() { paketAcikAnahtar = onceki }()

	p.Imza = p.Imza[:len(p.Imza)-4] + "AAAA"
	if err := eklentiKur(p, dosya); err == nil {
		t.Fatal("bozuk imzayla kurulum basarili oldu")
	}
}

func TestKurulumAnahtarYokkenKapali(t *testing.T) {
	dosya := []byte("ikili")
	p, _ := testPaket(t, dosya)
	onceki := paketAcikAnahtar
	paketAcikAnahtar = ""
	defer func() { paketAcikAnahtar = onceki }()
	if err := eklentiKur(p, dosya); err != errPaketAnahtarYok {
		t.Fatalf("anahtar yokken kurulum kapali degil: %v", err)
	}
}
