package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"os"
	"os/user"
	"path/filepath"
	"sort"
	"strings"
	"testing"
	"time"
)

func setup(t *testing.T, workdir, username string) (tmpdir string) {
	var err error
	tmpdir, err = ioutil.TempDir(workdir, "gclogs-test-setup-")
	if err != nil {
		t.Fatalf("ioutil.TempDir failed: %v", err)
	}
	logfiles := []struct {
		name string
		link string
		age  time.Duration
	}{
		{"prog1.host.%USER%.log.veyron.INFO.20141204-131502.12345", "", 4 * time.Hour},
		{"prog1.host.%USER%.log.veyron.INFO.20141204-145040.23456", "prog1.INFO", 1 * time.Hour},
		{"prog1.host.%USER%.log.veyron.ERROR.20141204-145040.23456", "prog1.ERROR", 1 * time.Hour},
		{"prog2.host.%USER%.log.veyron.INFO.20141204-135040.23456", "prog2.INFO", 4 * time.Hour},
		{"prog3.host.otheruser.log.veyron.INFO.20141204-135040.23456", "prog3.INFO", 1 * time.Hour},
		{"foo.txt", "", 1 * time.Hour},
		{"bar.txt", "", 1 * time.Hour},
	}
	for _, l := range logfiles {
		l.name = strings.Replace(l.name, "%USER%", username, -1)
		filename := filepath.Join(tmpdir, l.name)
		if err := ioutil.WriteFile(filename, []byte{}, 0644); err != nil {
			t.Fatalf("ioutil.WriteFile failed: %v", err)
		}
		mtime := time.Now().Add(-l.age)
		if err := os.Chtimes(filename, mtime, mtime); err != nil {
			t.Fatalf("os.Chtimes failed: %v", err)
		}
		if l.link != "" {
			if err := os.Symlink(l.name, filepath.Join(tmpdir, l.link)); err != nil {
				t.Fatalf("os.Symlink failed: %v", err)
			}
		}
	}
	if err := os.Mkdir(filepath.Join(tmpdir, "subdir"), 0700); err != nil {
		t.Fatalf("os.Mkdir failed: %v", err)
	}
	return
}

func TestGCLogs(t *testing.T) {
	workdir, err := ioutil.TempDir("", "parse-file-info-")
	if err != nil {
		t.Fatalf("ioutil.TempDir failed: %v", err)
	}
	defer os.RemoveAll(workdir)

	u, err := user.Current()
	if err != nil {
		t.Fatalf("user.Current failed: %v", err)
	}

	cmd := cmdGCLogs
	var stdout, stderr bytes.Buffer
	cmd.Init(nil, &stdout, &stderr)

	testcases := []struct {
		cutoff   time.Duration
		verbose  bool
		dryrun   bool
		expected []string
	}{
		{
			cutoff:  6 * time.Hour,
			verbose: false,
			dryrun:  false,
			expected: []string{
				`Processing: "%TESTDIR%"`,
				`Number of files deleted: 0`,
			},
		},
		{
			cutoff:  2 * time.Hour,
			verbose: false,
			dryrun:  true,
			expected: []string{
				`Processing: "%TESTDIR%"`,
				`Would delete "%TESTDIR%/prog1.host.%USER%.log.veyron.INFO.20141204-131502.12345"`,
				`Would delete "%TESTDIR%/prog2.host.%USER%.log.veyron.INFO.20141204-135040.23456"`,
				`Number of files deleted: 0`,
			},
		},
		{
			cutoff:  2 * time.Hour,
			verbose: false,
			dryrun:  false,
			expected: []string{
				`Processing: "%TESTDIR%"`,
				`Number of files deleted: 3`,
			},
		},
		{
			cutoff:  2 * time.Hour,
			verbose: true,
			dryrun:  false,
			expected: []string{
				`Processing: "%TESTDIR%"`,
				`Deleting "%TESTDIR%/prog1.host.%USER%.log.veyron.INFO.20141204-131502.12345"`,
				`Deleting "%TESTDIR%/prog2.host.%USER%.log.veyron.INFO.20141204-135040.23456"`,
				`Deleting symlink "%TESTDIR%/prog2.INFO"`,
				`Not a log file: "%TESTDIR%/bar.txt"`,
				`Not a log file: "%TESTDIR%/foo.txt"`,
				`Skipped directory: "%TESTDIR%/subdir"`,
				`Skipped log file created by other user: "%TESTDIR%/prog3.INFO"`,
				`Skipped log file created by other user: "%TESTDIR%/prog3.host.otheruser.log.veyron.INFO.20141204-135040.23456"`,
				`Number of files deleted: 3`,
			},
		},
		{
			cutoff:  time.Minute,
			verbose: true,
			dryrun:  false,
			expected: []string{
				`Processing: "%TESTDIR%"`,
				`Deleting "%TESTDIR%/prog1.host.%USER%.log.veyron.ERROR.20141204-145040.23456"`,
				`Deleting "%TESTDIR%/prog1.host.%USER%.log.veyron.INFO.20141204-131502.12345"`,
				`Deleting "%TESTDIR%/prog1.host.%USER%.log.veyron.INFO.20141204-145040.23456"`,
				`Deleting "%TESTDIR%/prog2.host.%USER%.log.veyron.INFO.20141204-135040.23456"`,
				`Deleting symlink "%TESTDIR%/prog1.ERROR"`,
				`Deleting symlink "%TESTDIR%/prog1.INFO"`,
				`Deleting symlink "%TESTDIR%/prog2.INFO"`,
				`Not a log file: "%TESTDIR%/bar.txt"`,
				`Not a log file: "%TESTDIR%/foo.txt"`,
				`Skipped directory: "%TESTDIR%/subdir"`,
				`Skipped log file created by other user: "%TESTDIR%/prog3.INFO"`,
				`Skipped log file created by other user: "%TESTDIR%/prog3.host.otheruser.log.veyron.INFO.20141204-135040.23456"`,
				`Number of files deleted: 7`,
			},
		},
		{
			cutoff:  time.Minute,
			verbose: false,
			dryrun:  false,
			expected: []string{
				`Processing: "%TESTDIR%"`,
				`Number of files deleted: 7`,
			},
		},
	}
	for _, tc := range testcases {
		testdir := setup(t, workdir, u.Username)
		cutoff := fmt.Sprintf("--cutoff=%s", tc.cutoff)
		verbose := fmt.Sprintf("--verbose=%v", tc.verbose)
		dryrun := fmt.Sprintf("--n=%v", tc.dryrun)
		if err := cmd.Execute([]string{cutoff, verbose, dryrun, testdir}); err != nil {
			t.Fatalf("%v: %v", stderr.String(), err)
		}
		gotsl := strings.Split(stdout.String(), "\n")
		if len(gotsl) >= 2 {
			sort.Strings(gotsl[1 : len(gotsl)-2])
		}
		got := strings.Join(gotsl, "\n")
		expected := strings.Join(tc.expected, "\n") + "\n"
		expected = strings.Replace(expected, "%TESTDIR%", testdir, -1)
		expected = strings.Replace(expected, "%USER%", u.Username, -1)
		if got != expected {
			t.Errorf("Unexpected result for (%v, %v): got %q, expected %q", tc.cutoff, tc.verbose, got, expected)
		}
		stdout.Reset()
	}
}
