/*
 * Mini Object Storage, (C) 2015 Minio, Inc.
 *
 * 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 config

import (
	"os"
	"path"
	"sync"
	"testing"

	"github.com/minio-io/minio/pkg/utils/crypto/keys"
	"github.com/minio-io/minio/pkg/utils/helpers"
	. "gopkg.in/check.v1"
)

type MySuite struct{}

var _ = Suite(&MySuite{})

func Test(t *testing.T) { TestingT(t) }

func (s *MySuite) TestConfig(c *C) {
	conf := Config{}
	conf.configPath, _ = helpers.MakeTempTestDir()
	defer os.RemoveAll(conf.configPath)
	conf.configFile = path.Join(conf.configPath, "config.json")
	if _, err := os.Stat(conf.configFile); os.IsNotExist(err) {
		_, err = os.Create(conf.configFile)
		if err != nil {
			c.Fatal(err)
		}
	}
	conf.configLock = new(sync.RWMutex)

	accesskey, _ := keys.GetRandomAlphaNumeric(keys.MINIO_ACCESS_ID)
	secretkey, _ := keys.GetRandomBase64(keys.MINIO_SECRET_ID)

	user := User{
		Name:      "gnubot",
		AccessKey: string(accesskey),
		SecretKey: string(secretkey),
	}

	conf.AddUser(user)
	err := conf.WriteConfig()
	c.Assert(err, IsNil)

	err = conf.ReadConfig()
	c.Assert(err, IsNil)

	accesskey, _ = keys.GetRandomAlphaNumeric(keys.MINIO_ACCESS_ID)
	secretkey, _ = keys.GetRandomBase64(keys.MINIO_SECRET_ID)
	user = User{
		Name:      "minio",
		AccessKey: string(accesskey),
		SecretKey: string(secretkey),
	}
	conf.AddUser(user)
	err = conf.WriteConfig()
	c.Assert(err, IsNil)
}