// Copyright 2018 The etcd Authors
//
// 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 rpcpb

import (
	"reflect"
	"testing"
)

func TestEtcdFlags(t *testing.T) {
	cfg := &Etcd{
		Name:    "s1",
		DataDir: "/tmp/etcd-agent-data-1/etcd.data",
		WALDir:  "/tmp/etcd-agent-data-1/etcd.data/member/wal",

		HeartbeatIntervalMs: 100,
		ElectionTimeoutMs:   1000,

		ListenClientURLs:    []string{"https://127.0.0.1:1379"},
		AdvertiseClientURLs: []string{"https://127.0.0.1:13790"},
		ClientAutoTLS:       true,
		ClientCertAuth:      false,
		ClientCertFile:      "",
		ClientKeyFile:       "",
		ClientTrustedCAFile: "",

		ListenPeerURLs:     []string{"https://127.0.0.1:1380"},
		AdvertisePeerURLs:  []string{"https://127.0.0.1:13800"},
		PeerAutoTLS:        true,
		PeerClientCertAuth: false,
		PeerCertFile:       "",
		PeerKeyFile:        "",
		PeerTrustedCAFile:  "",

		InitialCluster:      "s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800",
		InitialClusterState: "new",
		InitialClusterToken: "tkn",

		SnapshotCount:     10000,
		QuotaBackendBytes: 10740000000,

		PreVote:             true,
		InitialCorruptCheck: true,
	}

	exp := []string{
		"--name=s1",
		"--data-dir=/tmp/etcd-agent-data-1/etcd.data",
		"--wal-dir=/tmp/etcd-agent-data-1/etcd.data/member/wal",
		"--heartbeat-interval=100",
		"--election-timeout=1000",
		"--listen-client-urls=https://127.0.0.1:1379",
		"--advertise-client-urls=https://127.0.0.1:13790",
		"--auto-tls=true",
		"--client-cert-auth=false",
		"--listen-peer-urls=https://127.0.0.1:1380",
		"--initial-advertise-peer-urls=https://127.0.0.1:13800",
		"--peer-auto-tls=true",
		"--peer-client-cert-auth=false",
		"--initial-cluster=s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800",
		"--initial-cluster-state=new",
		"--initial-cluster-token=tkn",
		"--snapshot-count=10000",
		"--quota-backend-bytes=10740000000",
		"--pre-vote=true",
		"--experimental-initial-corrupt-check=true",
	}
	fs := cfg.Flags()
	if !reflect.DeepEqual(exp, fs) {
		t.Fatalf("expected %q, got %q", exp, fs)
	}
}
