summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/keybase/go-keybase-chat-bot/kbchat/test_utils.go
blob: 1a1639513f6ee055b7394d5a7f80be1542cfe481 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package kbchat

import (
	"crypto/rand"
	"encoding/hex"
	"io/ioutil"
	"os"
	"os/exec"
	"path"
	"strings"
	"testing"

	"github.com/stretchr/testify/require"
)

func randomString(t *testing.T) string {
	bytes := make([]byte, 16)
	_, err := rand.Read(bytes)
	require.NoError(t, err)
	return hex.EncodeToString(bytes)
}

func randomTempDir(t *testing.T) string {
	return path.Join(os.TempDir(), "keybase_bot_"+randomString(t))
}

func whichKeybase(t *testing.T) string {
	cmd := exec.Command("which", "keybase")
	out, err := cmd.Output()
	require.NoError(t, err)
	location := strings.TrimSpace(string(out))
	return location
}

func copyFile(t *testing.T, source, dest string) {
	sourceData, err := ioutil.ReadFile(source)
	require.NoError(t, err)
	err = ioutil.WriteFile(dest, sourceData, 0777)
	require.NoError(t, err)
}

// Creates the working directory and copies over the keybase binary in PATH.
// We do this to avoid any version mismatch issues.
func prepWorkingDir(t *testing.T, workingDir string) string {
	kbLocation := whichKeybase(t)

	err := os.Mkdir(workingDir, 0777)
	require.NoError(t, err)
	kbDestination := path.Join(workingDir, "keybase")

	copyFile(t, kbLocation, kbDestination)

	return kbDestination
}