summaryrefslogtreecommitdiff
path: root/pkg/otbuiltin/sysroot_test.go
blob: e1339f2c0200559fd10187f120a59e2b127de467 (plain)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package otbuiltin

import (
	"io/ioutil"
	"os"
	_ "os"
	"path"
	"testing"
)

func TestSysrootDeployment(t *testing.T) {
	osname := "testos"
	refspec := "testbranch"

	baseDir, err := ioutil.TempDir("", "otbuiltin-test-")
	if err != nil {
		t.Errorf("%s", err)
		return
	}
	defer os.RemoveAll(baseDir)

	sysrootDir := path.Join(baseDir, "sysroot")
	os.Mkdir(sysrootDir, 0777)

	commitDir := path.Join(baseDir, "commit1")
	os.Mkdir(commitDir, 0777)

	sysroot := NewSysroot(sysrootDir)
	err = sysroot.InitializeFS()
	if err != nil {
		t.Errorf("%s", err)
	}

	// Try again this time it should fail as it's already initialized
	err = sysroot.InitializeFS()
	if err == nil {
		t.Errorf("Initialized succeeded a second time!", err)
	}

	err = sysroot.InitOsname(osname, nil)
	if err != nil {
		t.Errorf("%s", err)
	}

	repo, err := sysroot.Repo(nil)
	if err != nil {
		t.Fatalf("%s", err)
	}

	/* Dummy commit */
	err = os.Mkdir(path.Join(commitDir, "boot"), 0777)
	if err != nil {
		t.Fatalf("%s", err)
	}

	err = ioutil.WriteFile(path.Join(commitDir, "boot", "vmlinuz-00e3261a6e0d79c329445acd540fb2b07187a0dcf6017065c8814010283ac67f"), []byte("A kernel it is"), 0777)
	if err != nil {
		t.Fatalf("%s", err)
	}

	usretcDir := path.Join(commitDir, "usr", "etc")
	err = os.MkdirAll(usretcDir, 0777)
	if err != nil {
		t.Fatalf("%s", err)
	}

	err = ioutil.WriteFile(path.Join(usretcDir, "os-release"), []byte("PRETTY_NAME=testos\n"), 0777)
	if err != nil {
		t.Fatalf("%s", err)
	}

	opts := NewCommitOptions()
	_, err = repo.PrepareTransaction()
	if err != nil {
		t.Fatalf("%s", err)
	}

	_, err = repo.Commit(commitDir, refspec, opts)
	if err != nil {
		t.Fatalf("%s", err)
	}

	_, err = repo.CommitTransaction()
	if err != nil {
		t.Fatalf("%s", err)
	}

	ropts := RemoteOptions{}
	err = repo.RemoteAdd("origin", "https://example.com", ropts, nil)
	if err != nil {
		t.Fatalf("%s", err)
	}

	/* Required by ostree to make sure a bunc of information was pulled in  */
	sysroot.Load(nil)

	revision, err := repo.ResolveRev(refspec, false)
	if err != nil {
		t.Fatalf("%s", err)
	}

	if revision == "" {
		t.Fatal("Revision doesn't exist")
	}

	origin := sysroot.OriginNewFromRefspec(refspec)
	deployment, err := sysroot.DeployTree(osname, revision, origin, nil, nil, nil)
	if err != nil {
		t.Fatalf("%s", err)
	}

	err = sysroot.SimpleWriteDeployment(osname, deployment, nil, 0, nil)
	if err != nil {
		t.Fatalf("%s", err)
	}
}