mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-11 07:11:02 +00:00
* first cut at pre-sort command that works on ndjson * finish pre_sort command for CSV and JSON and add test * try fixing golangci-lint * remove some dumb lint checks * more linter disabling * take .golangci.yml from previous repo * go fmt (facepalm) * remove ioutil to fix lint
206 lines
6.7 KiB
Go
206 lines
6.7 KiB
Go
package main
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/featurebasedb/featurebase/v3/idk"
|
|
"github.com/featurebasedb/featurebase/v3/idk/kafka"
|
|
"github.com/jaffee/commandeer"
|
|
"github.com/jaffee/commandeer/pflag"
|
|
pflag13 "github.com/spf13/pflag"
|
|
)
|
|
|
|
func TestConsumerKafkaArgs(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
|
|
AssumeEmptyPilosa bool
|
|
AutoGenerate bool
|
|
ExternalGenerate bool
|
|
OffsetMode bool
|
|
BatchSize int
|
|
Concurrency int
|
|
IDField string
|
|
PilosaHosts []string
|
|
PilosaGRPCHosts []string
|
|
Stats string
|
|
Verbose bool
|
|
ExpSplitBatchMode bool
|
|
WriteCSV string
|
|
Index string
|
|
PrimaryKeyFields []string
|
|
Pprof string
|
|
KafkaHosts []string
|
|
RegistryURL string
|
|
ConfluentCommand idk.ConfluentCommand
|
|
Group string
|
|
Topics []string
|
|
Timeout time.Duration
|
|
}{
|
|
{
|
|
name: "empty",
|
|
args: []string{
|
|
"", // os.Args[0] can be ignored
|
|
},
|
|
AssumeEmptyPilosa: false,
|
|
AutoGenerate: false,
|
|
ExternalGenerate: false,
|
|
OffsetMode: true,
|
|
BatchSize: 1,
|
|
Concurrency: 1,
|
|
IDField: "",
|
|
PilosaHosts: []string{"localhost:10101"},
|
|
PilosaGRPCHosts: []string{"localhost:20101"},
|
|
Stats: "localhost:9093",
|
|
Verbose: false,
|
|
ExpSplitBatchMode: false,
|
|
WriteCSV: "",
|
|
Index: "",
|
|
Pprof: "localhost:6062",
|
|
KafkaHosts: []string{"localhost:9092"},
|
|
RegistryURL: "http://localhost:8081",
|
|
Group: "defaultgroup",
|
|
Topics: []string{"defaulttopic"},
|
|
Timeout: time.Second,
|
|
},
|
|
{
|
|
name: "long",
|
|
args: []string{
|
|
"molecula-consumer-kafka",
|
|
"--assume-empty-pilosa", "true",
|
|
"--auto-generate", "true",
|
|
"--external-generate",
|
|
"--batch-size", "12345",
|
|
"--concurrency", "1",
|
|
"--exp-split-batch-mode", "true",
|
|
"--id-field", "id",
|
|
"--index", "index_name",
|
|
"--kafka-debug", "consumer",
|
|
"--log-path", "/tmp/file.log",
|
|
"--pack-bools", "true",
|
|
"--pilosa-grpc-hosts", "grpc:1,grpc:2,grpc:3",
|
|
"--pilosa-hosts", "pilosa:1,pilosa:2,pilosa:3",
|
|
"--stats", "localhost:9093",
|
|
"--tls.ca-certificate", "/tmp/file.ca",
|
|
"--tls.certificate", "/tmp/file.certificate",
|
|
"--tls.enable-client-verification", "true",
|
|
"--tls.key", "/tmp/file.key",
|
|
"--tls.skip-verify", "false",
|
|
"--verbose", "true",
|
|
"--write-csv", "/tmp/file.csv",
|
|
"--index", "index-name",
|
|
"--primary-key-fields", "k1",
|
|
"--pprof", "localhost:6666",
|
|
"--kafka-bootstrap-servers", "kafka:1,kafka:2,kafka:3",
|
|
"--schema-registry-url", "registry.molecula.com",
|
|
"--group", "molecula",
|
|
"--topics", "t1,t2,t3,t4",
|
|
"--timeout", "123ms",
|
|
},
|
|
AssumeEmptyPilosa: true,
|
|
ExternalGenerate: true,
|
|
AutoGenerate: true,
|
|
BatchSize: 12345,
|
|
Concurrency: 1,
|
|
IDField: "id",
|
|
PilosaHosts: []string{"pilosa:1", "pilosa:2", "pilosa:3"},
|
|
PilosaGRPCHosts: []string{"grpc:1", "grpc:2", "grpc:3"},
|
|
Stats: "localhost:9093",
|
|
Verbose: true,
|
|
ExpSplitBatchMode: true,
|
|
WriteCSV: "/tmp/file.csv",
|
|
Index: "index-name",
|
|
PrimaryKeyFields: []string{"k1"},
|
|
KafkaHosts: []string{"kafka:1", "kafka:2", "kafka:3"},
|
|
RegistryURL: "registry.molecula.com",
|
|
ConfluentCommand: idk.ConfluentCommand{
|
|
KafkaDebug: "consumer",
|
|
},
|
|
Group: "molecula",
|
|
Topics: []string{"t1", "t2", "t3", "t4"},
|
|
Timeout: 123 * time.Millisecond,
|
|
OffsetMode: true,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
fs := &pflag.FlagSet{FlagSet: pflag13.NewFlagSet(tc.args[0], pflag13.ExitOnError)}
|
|
m, err := kafka.NewMain()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if err := commandeer.LoadArgsEnv(fs, m, tc.args[1:], "CONSUMER_", nil); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if tc.AssumeEmptyPilosa != m.AssumeEmptyPilosa {
|
|
t.Fatalf("--assume-empty-pilosa expected: %v got: %v", tc.AssumeEmptyPilosa, m.AssumeEmptyPilosa)
|
|
}
|
|
if tc.AutoGenerate != m.AutoGenerate {
|
|
t.Fatalf("--auto-generate expected: %v got: %v", tc.AutoGenerate, m.AutoGenerate)
|
|
}
|
|
if tc.ExternalGenerate != m.ExternalGenerate {
|
|
t.Fatalf("--external-generate expected: %v got: %v", tc.ExternalGenerate, m.ExternalGenerate)
|
|
}
|
|
if tc.OffsetMode != m.OffsetMode {
|
|
t.Fatalf("--offset-mode expected: %v got: %v", tc.OffsetMode, m.OffsetMode)
|
|
}
|
|
if tc.BatchSize != m.BatchSize {
|
|
t.Fatalf("--batch-size expected: %v got: %v", tc.BatchSize, m.BatchSize)
|
|
}
|
|
if tc.Concurrency != m.Concurrency {
|
|
t.Fatalf("--concurrency expected: %v got: %v", tc.Concurrency, m.Concurrency)
|
|
}
|
|
if tc.IDField != m.IDField {
|
|
t.Fatalf("--id-field expected: %v got: %v", tc.IDField, m.IDField)
|
|
}
|
|
if !reflect.DeepEqual(tc.PilosaHosts, m.PilosaHosts) {
|
|
t.Fatalf("--pilosa-hosts expected: %v got: %v", tc.PilosaHosts, m.PilosaHosts)
|
|
}
|
|
if !reflect.DeepEqual(tc.PilosaGRPCHosts, m.PilosaGRPCHosts) {
|
|
t.Fatalf("--pilosa-grpc-hosts expected: %v got: %v", tc.PilosaGRPCHosts, m.PilosaGRPCHosts)
|
|
}
|
|
if tc.Stats != m.Stats {
|
|
t.Fatalf("--stats expected: %v got: %v", tc.Stats, m.Stats)
|
|
}
|
|
if tc.Verbose != m.Verbose {
|
|
t.Fatalf("--verbose expected: %v got: %v", tc.Verbose, m.Verbose)
|
|
}
|
|
if tc.ExpSplitBatchMode != m.ExpSplitBatchMode {
|
|
t.Fatalf("--exp-split-batch-mode expected: %v got: %v", tc.ExpSplitBatchMode, m.ExpSplitBatchMode)
|
|
}
|
|
if tc.WriteCSV != m.WriteCSV {
|
|
t.Fatalf("--write-csv expected: %v got: %v", tc.WriteCSV, m.WriteCSV)
|
|
}
|
|
if tc.Index != m.Index {
|
|
t.Fatalf("--index expected: %v got: %v", tc.Index, m.Index)
|
|
}
|
|
if !reflect.DeepEqual(tc.PrimaryKeyFields, m.PrimaryKeyFields) {
|
|
t.Fatalf("--primary-key-fields expected: %v got: %v", tc.PrimaryKeyFields, m.PrimaryKeyFields)
|
|
}
|
|
if !reflect.DeepEqual(tc.KafkaHosts, m.KafkaBootstrapServers) {
|
|
t.Fatalf("--kafka-hosts expected: %v got: %v", tc.KafkaHosts, m.KafkaBootstrapServers)
|
|
}
|
|
if tc.RegistryURL != m.SchemaRegistryURL {
|
|
t.Fatalf("--registry-url expected: %v got: %v", tc.RegistryURL, m.SchemaRegistryURL)
|
|
}
|
|
if tc.ConfluentCommand.KafkaDebug != m.ConfluentCommand.KafkaDebug {
|
|
t.Fatalf("--kafka-debug expected: %v got: %v", tc.ConfluentCommand.KafkaDebug, m.ConfluentCommand.KafkaDebug)
|
|
}
|
|
if tc.Group != m.Group {
|
|
t.Fatalf("--group expected: %v got: %v", tc.Group, m.Group)
|
|
}
|
|
if !reflect.DeepEqual(tc.Topics, m.Topics) {
|
|
t.Fatalf("--topics expected: %v got: %v", tc.Topics, m.Topics)
|
|
}
|
|
if tc.Timeout != m.Timeout {
|
|
t.Fatalf("--timeout expected: %v got: %v", tc.Timeout, m.Timeout)
|
|
}
|
|
})
|
|
}
|
|
}
|