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, "parse-file-info-")
	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()
	}
}
