// Copyright 2020 The gVisor 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 tools

import (
	"testing"
)

// TestRedis checks the Redis parsers on sample output.
func TestRedis(t *testing.T) {
	sampleData := `
	"PING_INLINE","48661.80"
	"PING_BULK","50301.81"
	"SET","48923.68"
	"GET","49382.71"
	"INCR","49975.02"
	"LPUSH","49875.31"
	"RPUSH","50276.52"
	"LPOP","50327.12"
	"RPOP","50556.12"
	"SADD","49504.95"
	"HSET","49504.95"
	"SPOP","50025.02"
	"LPUSH (needed to benchmark LRANGE)","48875.86"
	"LRANGE_100 (first 100 elements)","33955.86"
	"LRANGE_300 (first 300 elements)","16550.81"// Copyright 2020 The gVisor 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 tools

	"LRANGE_500 (first 450 elements)","13653.74"
	"LRANGE_600 (first 600 elements)","11219.57"
	"MSET (10 keys)","44682.75"
	`
	wants := map[string]float64{
		"PING_INLINE": 48661.80,
		"PING_BULK":   50301.81,
		"SET":         48923.68,
		"GET":         49382.71,
		"INCR":        49975.02,
		"LPUSH":       49875.31,
		"RPUSH":       50276.52,
		"LPOP":        50327.12,
		"RPOP":        50556.12,
		"SADD":        49504.95,
		"HSET":        49504.95,
		"SPOP":        50025.02,
		"LRANGE_100":  33955.86,
		"LRANGE_300":  16550.81,
		"LRANGE_500":  13653.74,
		"LRANGE_600":  11219.57,
		"MSET":        44682.75,
	}
	for op, want := range wants {
		redis := Redis{
			Operation: op,
		}
		if got, err := redis.parseOperation(sampleData); err != nil {
			t.Fatalf("failed to parse %s: %v", op, err)
		} else if want != got {
			t.Fatalf("wanted %f for op %s, got %f", want, op, got)
		}
	}
}