Commit c1c6c45b authored by Boris Mühmer's avatar Boris Mühmer
Browse files

added skeleton for startup handling

parent eadeeaa0
Loading
Loading
Loading
Loading

system/startup/mode.go

0 → 100644
+53 −0
Original line number Diff line number Diff line
package startup

import "strings"

// Mode defines the startup mode.
type Mode int

// Various startup modes.
const (
	UnknownStartupMode Mode = iota
	ServerStartupMode
	ClientStartupMode
	MonitorStartupMode
)

const (
	unknownStartupMode = "unknown"
	serverStartupMode  = "server"
	clientStartupMode  = "client"
	monitorStartupMode = "monitor"
)

func (m Mode) String() string {
	var s string
	switch m {
	case ServerStartupMode:
		s = serverStartupMode
	case ClientStartupMode:
		s = clientStartupMode
	case MonitorStartupMode:
		s = monitorStartupMode
	default:
		s = unknownStartupMode
	}
	return s
}

// Parse tries to parse a string and convert it into Mode.
func Parse(s string) Mode {
	var m Mode
	l := strings.ToLower(s)
	switch l {
	case serverStartupMode:
		m = ServerStartupMode
	case clientStartupMode:
		m = ClientStartupMode
	case monitorStartupMode:
		m = MonitorStartupMode
	default:
		m = UnknownStartupMode
	}
	return m
}
+44 −0
Original line number Diff line number Diff line
package startup

import "testing"

func TestModeToString(t *testing.T) {
	for _, tv := range []struct {
		m Mode
		s string
	}{
		{m: UnknownStartupMode, s: unknownStartupMode},
		{m: ServerStartupMode, s: serverStartupMode},
		{m: ClientStartupMode, s: clientStartupMode},
		{m: MonitorStartupMode, s: monitorStartupMode},
	} {
		if tr := tv.m.String(); tr != tv.s {
			t.Errorf("%v.String() is %q, expected %q", tv.m, tr, tv.s)
		}
	}
}

func TestStringToMode(t *testing.T) {
	for _, tv := range []struct {
		s string
		m Mode
	}{
		// direct
		{s: serverStartupMode, m: ServerStartupMode},
		{s: clientStartupMode, m: ClientStartupMode},
		{s: monitorStartupMode, m: MonitorStartupMode},
		//
		{s: "SeRvEr", m: ServerStartupMode},
		{s: "Client", m: ClientStartupMode},
		{s: "monitoR", m: MonitorStartupMode},
		// faults
		{s: "", m: UnknownStartupMode},
		{s: " ", m: UnknownStartupMode},
		{s: "srv", m: UnknownStartupMode},
		{s: "client server", m: UnknownStartupMode},
	} {
		if tr := Parse(tv.s); tr != tv.m {
			t.Errorf("Parse(%q) is %q, expected %v", tv.s, tr, tv.m)
		}
	}
}
+13 −0
Original line number Diff line number Diff line
package startup

// Startup information for the program wrapper.
type Startup struct {
	Mode Mode
}

// NewStartup parses the command line.
func NewStartup() *Startup {
	s := &Startup{}

	return s
}
+15 −0
Original line number Diff line number Diff line
package startup

import "testing"

func TestNewStartup(t *testing.T) {
	s := NewStartup()

	if s == nil {
		t.Error("NewStartup() returned nil")
	}

	if s.Mode != UnknownStartupMode {
		t.Errorf("Startup.Mode is %q, expected %q", s.Mode, UnknownStartupMode)
	}
}