Path: blob/dev/pkg/reporting/exporters/es/elasticsearch_test.go
4538 views
package es12import (3"testing"45"github.com/go-playground/validator/v10"6)78func TestOptionsValidation(t *testing.T) {9validate := validator.New()1011tests := []struct {12name string13opts Options14wantErr bool15}{16{17name: "host only",18opts: Options{19Host: "elasticsearch.local",20Port: 9200,21Username: "admin",22Password: "secret",23IndexName: "nuclei",24},25wantErr: false,26},27{28name: "ip only",29opts: Options{30IP: "192.168.1.1",31Port: 9200,32Username: "admin",33Password: "secret",34IndexName: "nuclei",35},36wantErr: false,37},38{39name: "both host and ip",40opts: Options{41Host: "elasticsearch.local",42IP: "192.168.1.1",43Port: 9200,44Username: "admin",45Password: "secret",46IndexName: "nuclei",47},48wantErr: false,49},50{51name: "neither host nor ip",52opts: Options{53Port: 9200,54Username: "admin",55Password: "secret",56IndexName: "nuclei",57},58wantErr: true,59},60{61name: "ip with invalid format",62opts: Options{63IP: "not-an-ip",64Port: 9200,65Username: "admin",66Password: "secret",67IndexName: "nuclei",68},69wantErr: true,70},71{72name: "ipv6 address",73opts: Options{74IP: "::1",75Port: 9200,76Username: "admin",77Password: "secret",78IndexName: "nuclei",79},80wantErr: false,81},82{83name: "missing username",84opts: Options{85Host: "elasticsearch.local",86Port: 9200,87Password: "secret",88IndexName: "nuclei",89},90wantErr: true,91},92{93name: "missing password",94opts: Options{95Host: "elasticsearch.local",96Port: 9200,97Username: "admin",98IndexName: "nuclei",99},100wantErr: true,101},102{103name: "missing index name",104opts: Options{105Host: "elasticsearch.local",106Port: 9200,107Username: "admin",108Password: "secret",109},110wantErr: true,111},112{113name: "port out of range",114opts: Options{115Host: "elasticsearch.local",116Port: 70000,117Username: "admin",118Password: "secret",119IndexName: "nuclei",120},121wantErr: true,122},123{124name: "zero port is valid",125opts: Options{126Host: "elasticsearch.local",127Port: 0,128Username: "admin",129Password: "secret",130IndexName: "nuclei",131},132wantErr: false,133},134}135136for _, tt := range tests {137t.Run(tt.name, func(t *testing.T) {138err := validate.Struct(tt.opts)139if (err != nil) != tt.wantErr {140t.Errorf("validate.Struct() error = %v, wantErr %v", err, tt.wantErr)141}142})143}144}145146147