// +build ignore

package home

import (
	"os"
	"testing"
)

func TestDoUpdate(t *testing.T) {

	config.DNS.Port = 0
	config.ourWorkingDir = "..." // set absolute path
	newver := "v0.96"

	data := `{
		"version": "v0.96",
		"announcement": "AdGuard Home v0.96 is now available!",
		"announcement_url": "",
		"download_windows_amd64": "",
		"download_windows_386": "",
		"download_darwin_amd64": "",
		"download_linux_amd64": "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.96/AdGuardHome_linux_amd64.tar.gz",
		"download_linux_386": "",
		"download_linux_arm": "",
		"download_linux_arm64": "",
		"download_linux_mips": "",
		"download_linux_mipsle": "",
		"selfupdate_min_version": "v0.0"
	}`
	uu, err := getUpdateInfo([]byte(data))
	if err != nil {
		t.Fatalf("getUpdateInfo: %s", err)
	}

	u := updateInfo{
		pkgURL:           "https://github.com/AdguardTeam/AdGuardHome/releases/download/" + newver + "/AdGuardHome_linux_amd64.tar.gz",
		pkgName:          config.ourWorkingDir + "/agh-update-" + newver + "/AdGuardHome_linux_amd64.tar.gz",
		newVer:           newver,
		updateDir:        config.ourWorkingDir + "/agh-update-" + newver,
		backupDir:        config.ourWorkingDir + "/agh-backup",
		configName:       config.ourWorkingDir + "/AdGuardHome.yaml",
		updateConfigName: config.ourWorkingDir + "/agh-update-" + newver + "/AdGuardHome/AdGuardHome.yaml",
		curBinName:       config.ourWorkingDir + "/AdGuardHome",
		bkpBinName:       config.ourWorkingDir + "/agh-backup/AdGuardHome",
		newBinName:       config.ourWorkingDir + "/agh-update-" + newver + "/AdGuardHome/AdGuardHome",
	}

	if uu.pkgURL != u.pkgURL ||
		uu.pkgName != u.pkgName ||
		uu.newVer != u.newVer ||
		uu.updateDir != u.updateDir ||
		uu.backupDir != u.backupDir ||
		uu.configName != u.configName ||
		uu.updateConfigName != u.updateConfigName ||
		uu.curBinName != u.curBinName ||
		uu.bkpBinName != u.bkpBinName ||
		uu.newBinName != u.newBinName {
		t.Fatalf("getUpdateInfo: %v != %v", uu, u)
	}

	e := doUpdate(&u)
	if e != nil {
		t.Fatalf("FAILED: %s", e)
	}
	os.RemoveAll(u.backupDir)
}

func TestTargzFileUnpack(t *testing.T) {
	fn := "./dist/AdGuardHome_v0.95_linux_amd64.tar.gz"
	outdir := "./test-unpack"
	_ = os.Mkdir(outdir, 0755)
	files, e := targzFileUnpack(fn, outdir)
	if e != nil {
		t.Fatalf("FAILED: %s", e)
	}
	t.Logf("%v", files)
	os.RemoveAll(outdir)
}

func TestZipFileUnpack(t *testing.T) {
	fn := "./dist/AdGuardHome_v0.95_Windows_amd64.zip"
	outdir := "./test-unpack"
	_ = os.Mkdir(outdir, 0755)
	files, e := zipFileUnpack(fn, outdir)
	if e != nil {
		t.Fatalf("FAILED: %s", e)
	}
	t.Logf("%v", files)
	os.RemoveAll(outdir)
}