// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import (
	"os"
	"testing"

	"go.fuchsia.dev/jiri/jiritest"
	"go.fuchsia.dev/jiri/project"
)

func TestResolveProjects(t *testing.T) {
	_, fakeroot, cleanup := setupUniverse(t)
	defer cleanup()

	if err := fakeroot.UpdateUniverse(false); err != nil {
		t.Errorf("%v", err)
	}
	localProjects, err := project.LocalProjects(fakeroot.X, project.FastScan)
	projects, _, _, err := project.LoadManifestFile(fakeroot.X, fakeroot.X.JiriManifestFile(), localProjects, false)
	lockPath := fakeroot.X.Root + "/jiri.lock"
	resolveFlag.lockFilePath = lockPath
	resolveFlag.enablePackageLock = true
	resolveFlag.enableProjectLock = true
	args := []string{}
	if err := runResolve(fakeroot.X, args); err != nil {
		t.Errorf("resolve failed due to error %v", err)
	}
	data, err := os.ReadFile(lockPath)
	if err != nil {
		t.Errorf("%+v", err)
	}

	projLocks, _, err := project.UnmarshalLockEntries(data)
	if err != nil {
		t.Errorf("parse generated lockfile failed due to error: %v", err)
	}

	if len(projects) != len(projLocks) {
		t.Errorf("expecting %v project locks, got %v", len(projects), len(projLocks))
	}

	for k, v := range projects {
		if projLock, ok := projLocks[project.ProjectLockKey(k)]; ok {
			if v.Revision != projLock.Revision {
				t.Errorf("expecting revision %q for project %q, got %q", v.Revision, v.Name, projLock.Revision)
			}
		} else {
			t.Errorf("project %q not found in lockfile", v.Name)
		}
	}
}

func TestResolvePackages(t *testing.T) {
	fakeroot, cleanup := jiritest.NewFakeJiriRoot(t)
	defer cleanup()
	// Replace the .jiri_manifest with package declarations
	pkgData := []byte(`
<manifest>
	<packages>
		<package name="gn/gn/${platform}"
             version="git_revision:bdb0fd02324b120cacde634a9235405061c8ea06"
             path="buildtools/{{.OS}}-x64"/>
    	<package name="infra/tools/luci/vpython/${platform}"
             version="git_revision:9a931a5307c46b16b1c12e01e8239d4a73830b89"
             path="buildtools/{{.OS}}-x64"/>
	</packages>
</manifest>
`)
	// Currently jiri is hard coded to only verify cipd packages for linux-amd64 and mac-amd64.
	// If new supported platform added, this test should be updated.
	expectedLocks := []project.PackageLock{
		{
			PackageName: "gn/gn/linux-amd64",
			VersionTag:  "git_revision:bdb0fd02324b120cacde634a9235405061c8ea06",
			InstanceID:  "0uGjKAZkJXPZjtYktgEwHiNbwsut_qRsk7ZCGGxi82IC",
		},
		{
			PackageName: "gn/gn/mac-amd64",
			VersionTag:  "git_revision:bdb0fd02324b120cacde634a9235405061c8ea06",
			InstanceID:  "rN2F641yR4Bj-H1q8OwC_RiqRpUYxy3hryzRfPER9wcC",
		},
		{
			PackageName: "infra/tools/luci/vpython/linux-amd64",
			VersionTag:  "git_revision:9a931a5307c46b16b1c12e01e8239d4a73830b89",
			InstanceID:  "uCjugbKg6wMIF6_H_BHECZQdcGRebhnZ6LzSodPHQ7AC",
		},
		{
			PackageName: "infra/tools/luci/vpython/mac-amd64",
			VersionTag:  "git_revision:9a931a5307c46b16b1c12e01e8239d4a73830b89",
			InstanceID:  "yAdok-mh5vfwq1vCAHprmejM9iE7R1t9Wn6RxrWmAAEC",
		},
	}
	if err := os.WriteFile(fakeroot.X.JiriManifestFile(), pkgData, 0644); err != nil {
		t.Errorf("failed to write package information into .jiri_manifest due to error: %v", err)
	}
	lockPath := fakeroot.X.Root + "/jiri.lock"
	resolveFlag.lockFilePath = lockPath
	resolveFlag.enablePackageLock = true
	resolveFlag.enableProjectLock = true
	resolveFlag.enablePackageVersion = true
	args := []string{}
	if err := runResolve(fakeroot.X, args); err != nil {
		t.Errorf("resolve failed due to error: %v", err)
	}
	data, err := os.ReadFile(lockPath)
	if err != nil {
		t.Errorf("read generated lockfile failed due to error: %v", err)
	}
	_, pkgLocks, err := project.UnmarshalLockEntries(data)
	if err != nil {
		t.Errorf("parse generated lockfile failed due to error: %v", err)
	}
	if len(expectedLocks) != len(pkgLocks) {
		t.Errorf("expecting %v locks, got %v", len(expectedLocks), len(pkgLocks))
	}
	for _, v := range expectedLocks {
		if pkgLock, ok := pkgLocks[v.Key()]; ok {
			if pkgLock != v {
				t.Errorf("expecting instance id %q for package %q, got %q", v.InstanceID, v.PackageName, pkgLock.InstanceID)
			}
		} else {
			t.Errorf("package %q not found in generated lockfile", v.PackageName)
		}
	}
}

func TestResolvePackagesPartial(t *testing.T) {
	fakeroot, cleanup := jiritest.NewFakeJiriRoot(t)
	defer cleanup()
	// Replace the .jiri_manifest with package declarations
	pkgData := []byte(`
<manifest>
	<packages>
		<package name="gn/gn/${platform}"
             version="git_revision:bdb0fd02324b120cacde634a9235405061c8ea06"
             path="buildtools/{{.OS}}-x64"/>
		<package name="infra/tools/luci/vpython/${platform}"
             version="git_revision:9a931a5307c46b16b1c12e01e8239d4a73830b89"
             path="buildtools/{{.OS}}-x64"/>
	</packages>
</manifest>
`)
	lockData := []byte(`
[
	{
		"package": "gn/gn/linux-amd64",
		"version": "git_revision:bdb0fd02324b120cacde634a9235405061c8ea06",
		"instance_id": "0uGjKAZkJXPZjtYktgEwHiNbwsut_qRsk7ZCGGxi82IC"
	},
	{
		"package": "gn/gn/mac-amd64",
		"version": "git_revision:bdb0fd02324b120cacde634a9235405061c8ea06",
		"instance_id": "rN2F641yR4Bj-H1q8OwC_RiqRpUYxy3hryzRfPER9wcC"
	},
	{
		"package": "infra/tools/luci/vpython/linux-amd64",
		"version": "git_revision:d7d9ae19b9ace8164177c38a3f0afd2f698c02a7",
		"instance_id": "uiXWd9vshjd1KMvVmdopnRnfAPbWpyvqJqsWn2Rcs9kC"
	},
	{
		"package": "infra/tools/luci/vpython/mac-amd64",
		"version": "git_revision:d7d9ae19b9ace8164177c38a3f0afd2f698c02a7",
		"instance_id": "DEbIUasQv4NGfzxj9b6gYzMrZKr9kQ6mF6ZX41a_9_8C"
	}
]
`)
	// Currently jiri is hard coded to only verify cipd packages for linux-amd64 and mac-amd64.
	// If new supported platform added, this test should be updated.
	expectedLocks := []project.PackageLock{
		{
			PackageName: "gn/gn/linux-amd64",
			VersionTag:  "git_revision:bdb0fd02324b120cacde634a9235405061c8ea06",
			InstanceID:  "0uGjKAZkJXPZjtYktgEwHiNbwsut_qRsk7ZCGGxi82IC",
		},
		{
			PackageName: "gn/gn/mac-amd64",
			VersionTag:  "git_revision:bdb0fd02324b120cacde634a9235405061c8ea06",
			InstanceID:  "rN2F641yR4Bj-H1q8OwC_RiqRpUYxy3hryzRfPER9wcC",
		},
		{
			PackageName: "infra/tools/luci/vpython/linux-amd64",
			VersionTag:  "git_revision:9a931a5307c46b16b1c12e01e8239d4a73830b89",
			InstanceID:  "uCjugbKg6wMIF6_H_BHECZQdcGRebhnZ6LzSodPHQ7AC",
		},
		{
			PackageName: "infra/tools/luci/vpython/mac-amd64",
			VersionTag:  "git_revision:9a931a5307c46b16b1c12e01e8239d4a73830b89",
			InstanceID:  "yAdok-mh5vfwq1vCAHprmejM9iE7R1t9Wn6RxrWmAAEC",
		},
	}
	if err := os.WriteFile(fakeroot.X.JiriManifestFile(), pkgData, 0644); err != nil {
		t.Errorf("failed to write package information into .jiri_manifest due to error: %v", err)
	}
	lockPath := fakeroot.X.Root + "/jiri.lock"
	if err := os.WriteFile(lockPath, lockData, 0644); err != nil {
		t.Errorf("failed to write lockfile information into jiri.lock due to error: %v", err)
	}
	resolveFlag.lockFilePath = lockPath
	resolveFlag.enablePackageLock = true
	resolveFlag.enableProjectLock = true
	resolveFlag.enablePackageVersion = true
	resolveFlag.fullResolve = false
	args := []string{}
	if err := runResolve(fakeroot.X, args); err != nil {
		t.Errorf("resolve failed due to error: %v", err)
	}
	data, err := os.ReadFile(lockPath)
	if err != nil {
		t.Errorf("read generated lockfile failed due to error: %v", err)
	}
	_, pkgLocks, err := project.UnmarshalLockEntries(data)
	if err != nil {
		t.Errorf("parse generated lockfile failed due to error: %v", err)
	}
	if len(expectedLocks) != len(pkgLocks) {
		t.Errorf("expecting %v locks, got %v", len(expectedLocks), len(pkgLocks))
	}
	for _, v := range expectedLocks {
		if pkgLock, ok := pkgLocks[v.Key()]; ok {
			if pkgLock != v {
				t.Errorf("expecting instance id %q for package %q, got %q", v.InstanceID, v.PackageName, pkgLock.InstanceID)
			}
		} else {
			t.Errorf("package %q not found in generated lockfile", v.PackageName)
		}
	}
}
