summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dryad/conf/conf.go75
-rw-r--r--dryad/conf/conf_suite_test.go29
-rw-r--r--dryad/conf/conf_test.go68
3 files changed, 172 insertions, 0 deletions
diff --git a/dryad/conf/conf.go b/dryad/conf/conf.go
new file mode 100644
index 0000000..f2bf265
--- /dev/null
+++ b/dryad/conf/conf.go
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2017-2018 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+// Package conf manages Dryad's configuration.
+package conf
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+
+ "github.com/BurntSushi/toml"
+)
+
+// DefaultRPCPort is a port that should be used as default parameter
+// for Dryad's RPC client and server.
+const DefaultRPCPort = 7175
+
+// NewConf returns a new instance of General configuration with default values set.
+func NewConf() *General {
+ return &General{
+ Address: fmt.Sprintf(":%d", DefaultRPCPort),
+ User: &User{
+ Name: "boruta-user",
+ Groups: []string{},
+ },
+ SDcard: "/dev/sdX",
+ }
+}
+
+// User is a section in a configuration used for user manipulation.
+type User struct {
+ // Name is a username of a local account. It should be used to establish SSH session
+ // to the system Dryad is running on.
+ Name string `toml:"name"`
+ // Groups is a list of local Unix groups the username belongs to.
+ Groups []string `toml:"groups"`
+}
+
+// General is a base struct of configuration.
+type General struct {
+ // Address is used to listen for connection from Boruta.
+ Address string `toml:"listen_address"`
+ // User refers information necessary to create the user.
+ User *User `toml:"user"`
+ // SDcard is a base path to block device of sdcard.
+ SDcard string `toml:"sdcard"`
+}
+
+// Marshal writes TOML representation of g to w.
+func (g *General) Marshal(w io.Writer) error {
+ return toml.NewEncoder(w).Encode(g)
+}
+
+// Unmarshal reads TOML representation from r and parses it into g.
+func (g *General) Unmarshal(r io.Reader) error {
+ b, err := ioutil.ReadAll(r)
+ if err != nil {
+ return err
+ }
+ return toml.Unmarshal(b, g)
+}
diff --git a/dryad/conf/conf_suite_test.go b/dryad/conf/conf_suite_test.go
new file mode 100644
index 0000000..cb1aa15
--- /dev/null
+++ b/dryad/conf/conf_suite_test.go
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2017-2018 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package conf_test
+
+import (
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+
+ "testing"
+)
+
+func TestConf(t *testing.T) {
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "Conf Suite")
+}
diff --git a/dryad/conf/conf_test.go b/dryad/conf/conf_test.go
new file mode 100644
index 0000000..9a2d369
--- /dev/null
+++ b/dryad/conf/conf_test.go
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2017-2018 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package conf_test
+
+import (
+ "bytes"
+ "strings"
+
+ . "git.tizen.org/tools/boruta/dryad/conf"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Conf", func() {
+ marshaled := `listen_address = ":7175"
+sdcard = "/dev/sdX"
+
+[user]
+ name = "boruta-user"
+ groups = []
+`
+ unmarshaled := &General{
+ Address: ":7175",
+ User: &User{
+ Name: "boruta-user",
+ Groups: []string{},
+ },
+ SDcard: "/dev/sdX",
+ }
+ var g *General
+
+ BeforeEach(func() {
+ g = NewConf()
+ })
+
+ It("should initially have default configuration", func() {
+ Expect(g).To(Equal(unmarshaled))
+ })
+
+ It("should encode default configuration", func() {
+ var w bytes.Buffer
+ g.Marshal(&w)
+ result := w.String()
+ Expect(result).ToNot(BeEmpty())
+ Expect(result).To(Equal(marshaled))
+ })
+
+ It("should decode default configuration", func() {
+ g = new(General)
+ g.Unmarshal(strings.NewReader(marshaled))
+ Expect(g).To(Equal(unmarshaled))
+ })
+})