Skip to content

Commit 51619f0

Browse files
committed
qemu: modify Domain.Status to use raw.StatusInfo and raw.RunState types
1 parent 2194d93 commit 51619f0

File tree

4 files changed

+49
-34
lines changed

4 files changed

+49
-34
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ go:
33
- 1.7
44
before_install:
55
- go get github.com/golang/lint/golint
6+
- go get golang.org/x/tools/cmd/stringer
67
before_script:
78
- go get -d ./...
89
script:

domain.go

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
// Package qemu provides an interface for interacting with running QEMU instances.
1616
package qemu
1717

18+
//go:generate stringer -type=Status -output=string.gen.go
19+
1820
import (
1921
"encoding/json"
2022
"errors"
@@ -26,6 +28,7 @@ import (
2628
"time"
2729

2830
"github.com/digitalocean/go-qemu/qmp"
31+
"github.com/digitalocean/go-qemu/qmp/raw"
2932
)
3033

3134
var (
@@ -269,48 +272,46 @@ func (d *Domain) ScreenDump() (io.ReadCloser, error) {
269272
}
270273

271274
// Status represents the current status of the domain.
272-
type Status string
275+
type Status int
273276

274277
// Status constants which indicate the status of a domain.
275278
const (
276-
StatusDebug Status = "debug"
277-
StatusFinishMigrate Status = "finish-migrate"
278-
StatusIOError Status = "io-error"
279-
StatusInMigrate Status = "inmigrate"
280-
StatusInternalError Status = "internal-error"
281-
StatusPaused Status = "paused"
282-
StatusPostMigrate Status = "postmigrate"
283-
StatusPreLaunch Status = "prelaunch"
284-
StatusRestoreVM Status = "restore-vm"
285-
StatusRunning Status = "running"
286-
StatusSaveVM Status = "save-vm"
287-
StatusShutdown Status = "shutdown"
288-
StatusWatchdog Status = "watchdog"
279+
StatusDebug Status = Status(raw.RunStateDebug)
280+
StatusFinishMigrate Status = Status(raw.RunStateFinishMigrate)
281+
StatusGuestPanicked Status = Status(raw.RunStateGuestPanicked)
282+
StatusIOError Status = Status(raw.RunStateIOError)
283+
StatusInMigrate Status = Status(raw.RunStateInmigrate)
284+
StatusInternalError Status = Status(raw.RunStateInternalError)
285+
StatusPaused Status = Status(raw.RunStatePaused)
286+
StatusPostMigrate Status = Status(raw.RunStatePostmigrate)
287+
StatusPreLaunch Status = Status(raw.RunStatePrelaunch)
288+
StatusRestoreVM Status = Status(raw.RunStateRestoreVM)
289+
StatusRunning Status = Status(raw.RunStateRunning)
290+
StatusSaveVM Status = Status(raw.RunStateSaveVM)
291+
StatusShutdown Status = Status(raw.RunStateShutdown)
292+
StatusSuspended Status = Status(raw.RunStateSuspended)
293+
StatusWatchdog Status = Status(raw.RunStateWatchdog)
289294
)
290295

291296
// Status returns the current status of the domain.
292297
func (d *Domain) Status() (Status, error) {
293-
raw, err := d.Run(qmp.Command{Execute: "query-status"})
298+
out, err := d.Run(qmp.Command{Execute: "query-status"})
294299
if err != nil {
295300
// libvirt returns an error if the domain is not running
296301
if strings.Contains(err.Error(), "not running") {
297302
return StatusShutdown, nil
298303
}
299304

300-
return "", err
305+
return 0, err
301306
}
302307

303308
var response struct {
304-
ID string `json:"id"`
305-
Return struct {
306-
Running bool `json:"running"`
307-
Singlestep bool `json:"singlestep"`
308-
Status string `json:"status"`
309-
} `json:"return"`
309+
ID string `json:"id"`
310+
Return raw.StatusInfo `json:"return"`
310311
}
311312

312-
if err = json.Unmarshal(raw, &response); err != nil {
313-
return "", err
313+
if err = json.Unmarshal(out, &response); err != nil {
314+
return 0, err
314315
}
315316

316317
return Status(response.Return.Status), nil

domain_test.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"time"
2525

2626
"github.com/digitalocean/go-qemu/qmp"
27+
"github.com/digitalocean/go-qemu/qmp/raw"
2728
)
2829

2930
const defaultTestTimeout = 50 * time.Millisecond
@@ -415,12 +416,10 @@ func TestStatusRunning(t *testing.T) {
415416
want, got)
416417
}
417418

418-
type response struct {
419-
Status Status
420-
}
421-
422419
return success{
423-
Return: response{Status: StatusRunning},
420+
Return: raw.StatusInfo{
421+
Status: raw.RunStateRunning,
422+
},
424423
}, nil
425424
})
426425
defer done()
@@ -442,12 +441,10 @@ func TestStatusShutdown(t *testing.T) {
442441
want, got)
443442
}
444443

445-
type response struct {
446-
Status Status
447-
}
448-
449444
return success{
450-
Return: response{Status: StatusShutdown},
445+
Return: raw.StatusInfo{
446+
Status: raw.RunStateShutdown,
447+
},
451448
}, nil
452449
})
453450
defer done()

string.gen.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)