-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move some content from correctness_test.go to utils.go (#1497)
* Move some content from correctness_test.go to utils.go This change makes these functions/types available from the metrics package, where they will be needed to address issue #652. * Add comments for exported types and fcns * Address PR comments * Fix lint
- Loading branch information
Showing
2 changed files
with
170 additions
and
134 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
package correctness | ||
|
||
import ( | ||
"bufio" | ||
"fmt" | ||
"os" | ||
"path/filepath" | ||
"strings" | ||
"testing" | ||
|
||
"go.opentelemetry.io/collector/testbed/testbed" | ||
) | ||
|
||
// CreateConfigYaml creates a yaml config for an otel collector given a testbed sender, testbed receiver, any | ||
// processors, and a pipeline type. A collector created from the resulting yaml string should be able to talk | ||
// the specified sender and receiver. | ||
func CreateConfigYaml( | ||
sender testbed.DataSender, | ||
receiver testbed.DataReceiver, | ||
processors map[string]string, | ||
pipelineType string, | ||
) string { | ||
|
||
// Prepare extra processor config section and comma-separated list of extra processor | ||
// names to use in corresponding "processors" settings. | ||
processorsSections := "" | ||
processorsList := "" | ||
if len(processors) > 0 { | ||
first := true | ||
for name, cfg := range processors { | ||
processorsSections += cfg + "\n" | ||
if !first { | ||
processorsList += "," | ||
} | ||
processorsList += name | ||
first = false | ||
} | ||
} | ||
|
||
format := ` | ||
receivers:%v | ||
exporters:%v | ||
processors: | ||
%s | ||
extensions: | ||
service: | ||
extensions: | ||
pipelines: | ||
%s: | ||
receivers: [%v] | ||
processors: [%s] | ||
exporters: [%v] | ||
` | ||
|
||
return fmt.Sprintf( | ||
format, | ||
sender.GenConfigYAMLStr(), | ||
receiver.GenConfigYAMLStr(), | ||
processorsSections, | ||
pipelineType, | ||
sender.ProtocolName(), | ||
processorsList, | ||
receiver.ProtocolName(), | ||
) | ||
} | ||
|
||
// PipelineDef holds the information necessary to run a single testbed configuration. | ||
type PipelineDef struct { | ||
Receiver string | ||
Exporter string | ||
TestName string | ||
DataSender testbed.DataSender | ||
DataReceiver testbed.DataReceiver | ||
ResourceSpec testbed.ResourceSpec | ||
} | ||
|
||
// LoadPictOutputPipelineDefs generates a slice of PipelineDefs from the passed-in generated PICT file. The | ||
// result should be a set of PipelineDefs that covers all possible pipeline configurations. | ||
func LoadPictOutputPipelineDefs(fileName string) ([]PipelineDef, error) { | ||
file, err := os.Open(filepath.Clean(fileName)) | ||
if err != nil { | ||
return nil, err | ||
} | ||
defer func() { | ||
cerr := file.Close() | ||
if err == nil { | ||
err = cerr | ||
} | ||
}() | ||
|
||
defs := make([]PipelineDef, 0) | ||
scanner := bufio.NewScanner(file) | ||
for scanner.Scan() { | ||
s := strings.Split(scanner.Text(), "\t") | ||
if "Receiver" == s[0] { | ||
continue | ||
} | ||
|
||
var aDef PipelineDef | ||
aDef.Receiver, aDef.Exporter = s[0], s[1] | ||
defs = append(defs, aDef) | ||
} | ||
|
||
return defs, err | ||
} | ||
|
||
// ConstructTraceSender creates a testbed trace sender from the passed-in trace sender identifier. | ||
func ConstructTraceSender(t *testing.T, receiver string) testbed.DataSender { | ||
var sender testbed.DataSender | ||
switch receiver { | ||
case "otlp": | ||
sender = testbed.NewOTLPTraceDataSender(testbed.DefaultHost, testbed.GetAvailablePort(t)) | ||
case "opencensus": | ||
sender = testbed.NewOCTraceDataSender(testbed.DefaultHost, testbed.GetAvailablePort(t)) | ||
case "jaeger": | ||
sender = testbed.NewJaegerGRPCDataSender(testbed.DefaultHost, testbed.GetAvailablePort(t)) | ||
case "zipkin": | ||
sender = testbed.NewZipkinDataSender(testbed.DefaultHost, testbed.GetAvailablePort(t)) | ||
default: | ||
t.Errorf("unknown receiver type: %s", receiver) | ||
} | ||
return sender | ||
} | ||
|
||
// ConstructMetricsSender creates a testbed metrics sender from the passed-in metrics sender identifier. | ||
func ConstructMetricsSender(t *testing.T, receiver string) testbed.DataSender { | ||
var sender testbed.DataSender | ||
switch receiver { | ||
case "otlp": | ||
sender = testbed.NewOTLPMetricDataSender(testbed.DefaultHost, testbed.GetAvailablePort(t)) | ||
case "opencensus": | ||
sender = testbed.NewOCMetricDataSender(testbed.DefaultHost, testbed.GetAvailablePort(t)) | ||
// will be uncommented in a subsequent PR | ||
// case "prometheus": | ||
// sender = testbed.NewPrometheusDataSender(testbed.DefaultHost, testbed.GetAvailablePort(t)) | ||
default: | ||
t.Errorf("unknown receiver type: %s", receiver) | ||
} | ||
return sender | ||
} | ||
|
||
// ConstructReceiver creates a testbed receiver from the passed-in recevier identifier. | ||
func ConstructReceiver(t *testing.T, exporter string) testbed.DataReceiver { | ||
var receiver testbed.DataReceiver | ||
switch exporter { | ||
case "otlp": | ||
receiver = testbed.NewOTLPDataReceiver(testbed.GetAvailablePort(t)) | ||
case "opencensus": | ||
receiver = testbed.NewOCDataReceiver(testbed.GetAvailablePort(t)) | ||
case "jaeger": | ||
receiver = testbed.NewJaegerDataReceiver(testbed.GetAvailablePort(t)) | ||
case "zipkin": | ||
receiver = testbed.NewZipkinDataReceiver(testbed.GetAvailablePort(t)) | ||
// will be uncommented in a subsequent PR | ||
// case "prometheus": | ||
// receiver = testbed.NewPrometheusDataReceiver(testbed.GetAvailablePort(t)) | ||
default: | ||
t.Errorf("unknown exporter type: %s", exporter) | ||
} | ||
return receiver | ||
} |