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
|
local InstallHandle = require "mason-core.installer.handle"
local mock = require "luassert.mock"
local spy = require "luassert.spy"
local stub = require "luassert.stub"
describe("installer handle", function()
local snapshot
before_each(function()
snapshot = assert.snapshot()
end)
after_each(function()
snapshot:revert()
end)
it("should register spawn handle", function()
local handle = InstallHandle.new(mock.new {})
local spawn_handle_change_handler = spy.new()
local luv_handle = mock.new {}
handle:once("spawn_handles:change", spawn_handle_change_handler)
handle:register_spawn_handle(luv_handle, 1337, "tar", { "-xvf", "file" })
assert.same({
uv_handle = luv_handle,
pid = 1337,
cmd = "tar",
args = { "-xvf", "file" },
}, handle:peek_spawn_handle():get())
assert.spy(spawn_handle_change_handler).was_called(1)
end)
it("should deregister spawn handle", function()
local handle = InstallHandle.new(mock.new {})
local spawn_handle_change_handler = spy.new()
local luv_handle1 = mock.new {}
local luv_handle2 = mock.new {}
handle:on("spawn_handles:change", spawn_handle_change_handler)
handle:register_spawn_handle(luv_handle1, 42, "curl", { "someurl" })
handle:register_spawn_handle(luv_handle2, 1337, "tar", { "-xvf", "file" })
assert.is_true(handle:deregister_spawn_handle(luv_handle1))
assert.equals(1, #handle.spawn_handles)
assert.same({
uv_handle = luv_handle2,
pid = 1337,
cmd = "tar",
args = { "-xvf", "file" },
}, handle:peek_spawn_handle():get())
assert.spy(spawn_handle_change_handler).was_called(3)
end)
it("should change state", function()
local handle = InstallHandle.new(mock.new {})
local state_change_handler = spy.new()
handle:once("state:change", state_change_handler)
handle:set_state "QUEUED"
assert.equals("QUEUED", handle.state)
assert.spy(state_change_handler).was_called(1)
assert.spy(state_change_handler).was_called_with("QUEUED", "IDLE")
end)
it("should send signals to registered handles", function()
local process = require "mason-core.process"
stub(process, "kill")
local uv_handle = {}
local handle = InstallHandle.new(mock.new {})
local kill_handler = spy.new()
handle:once("kill", kill_handler)
handle.state = "ACTIVE"
handle.spawn_handles = { { uv_handle = uv_handle } }
handle:kill(9)
assert.spy(process.kill).was_called(1)
assert.spy(process.kill).was_called_with(uv_handle, 9)
assert.spy(kill_handler).was_called(1)
assert.spy(kill_handler).was_called_with(9)
end)
it("should terminate handle", function()
local process = require "mason-core.process"
stub(process, "kill")
local uv_handle1 = {}
local uv_handle2 = {}
local handle = InstallHandle.new(mock.new {})
local kill_handler = spy.new()
local terminate_handler = spy.new()
local closed_handler = spy.new()
handle:once("kill", kill_handler)
handle:once("terminate", terminate_handler)
handle:once("closed", closed_handler)
handle.state = "ACTIVE"
handle.spawn_handles = { { uv_handle = uv_handle2 }, { uv_handle = uv_handle2 } }
handle:terminate()
assert.spy(process.kill).was_called(2)
assert.spy(process.kill).was_called_with(uv_handle1, 15)
assert.spy(process.kill).was_called_with(uv_handle2, 15)
assert.spy(kill_handler).was_called(1)
assert.spy(kill_handler).was_called_with(15)
assert.spy(terminate_handler).was_called(1)
assert.is_true(handle.is_terminated)
assert.wait(function()
assert.is_true(handle:is_closed())
assert.spy(closed_handler).was_called(1)
end)
end)
end)
|