Skip to content

Commit bf7ba8f

Browse files
Gabriel Ionescugbionescu
authored andcommitted
test: add test for LoadSnapshot
Test the LoadSnapshot functionality by creating a snapshot and loading it immediately. Signed-off-by: Gabriel Ionescu <gbi@amazon.com> Signed-off-by: Gabriel Ionescu <plp.github@gmail.com>
1 parent 2b31035 commit bf7ba8f

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

machine_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ var (
7272
testBalloonDeflateOnOom = true
7373
testStatsPollingIntervals = int64(1)
7474
testNewStatsPollingIntervals = int64(6)
75+
76+
// How long to wait for the socket to appear.
77+
firecrackerSocketWait = int64(10)
7578
)
7679

7780
func envOrDefault(k, empty string) string {
@@ -1729,6 +1732,76 @@ func TestCreateSnapshot(t *testing.T) {
17291732
}
17301733
}
17311734

1735+
func TestLoadSnapshot(t *testing.T) {
1736+
fctesting.RequiresKVM(t)
1737+
fctesting.RequiresRoot(t)
1738+
1739+
ctx := context.Background()
1740+
1741+
dir, err := ioutil.TempDir("", t.Name())
1742+
require.NoError(t, err)
1743+
defer os.RemoveAll(dir)
1744+
1745+
// Set snap and mem paths
1746+
socketPath := filepath.Join(dir, fsSafeTestName.Replace(t.Name()))
1747+
snapPath := socketPath + "SnapFile"
1748+
memPath := socketPath + "MemFile"
1749+
defer os.Remove(socketPath)
1750+
defer os.Remove(snapPath)
1751+
defer os.Remove(memPath)
1752+
1753+
// Tee logs for validation:
1754+
var logBuffer bytes.Buffer
1755+
machineLogger := logrus.New()
1756+
machineLogger.Out = io.MultiWriter(os.Stderr, &logBuffer)
1757+
1758+
// Create a snapshot
1759+
{
1760+
cfg := createValidConfig(t, socketPath+".create")
1761+
m, err := NewMachine(ctx, cfg, func(m *Machine) {
1762+
// Rewriting m.cmd partially wouldn't work since Cmd has
1763+
// some unexported members
1764+
args := m.cmd.Args[1:]
1765+
m.cmd = exec.Command(getFirecrackerBinaryPath(), args...)
1766+
}, WithLogger(logrus.NewEntry(machineLogger)))
1767+
require.NoError(t, err)
1768+
1769+
err = m.Start(ctx)
1770+
require.NoError(t, err)
1771+
1772+
err = m.PauseVM(ctx)
1773+
require.NoError(t, err)
1774+
1775+
err = m.CreateSnapshot(ctx, memPath, snapPath)
1776+
require.NoError(t, err)
1777+
1778+
err = m.StopVMM()
1779+
require.NoError(t, err)
1780+
}
1781+
1782+
// Load a snapshot
1783+
{
1784+
cfg := createValidConfig(t, socketPath+".load")
1785+
m, err := NewMachine(ctx, cfg, func(m *Machine) {
1786+
// Rewriting m.cmd partially wouldn't work since Cmd has
1787+
// some unexported members
1788+
args := m.cmd.Args[1:]
1789+
m.cmd = exec.Command(getFirecrackerBinaryPath(), args...)
1790+
}, WithLogger(logrus.NewEntry(machineLogger)))
1791+
require.NoError(t, err)
1792+
1793+
err = m.Start(ctx, WithSnapshot(ctx, memPath, snapPath))
1794+
require.NoError(t, err)
1795+
1796+
err = m.ResumeVM(ctx)
1797+
require.NoError(t, err)
1798+
1799+
err = m.StopVMM()
1800+
require.NoError(t, err)
1801+
}
1802+
1803+
}
1804+
17321805
func testCreateBalloon(ctx context.Context, t *testing.T, m *Machine) {
17331806
if err := m.CreateBalloon(ctx, testBalloonMemory, testBalloonDeflateOnOom, testStatsPollingIntervals); err != nil {
17341807
t.Errorf("Create balloon device failed from testAttachBalloon: %s", err)

0 commit comments

Comments
 (0)