validator/validators/validator.go (54 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT
package validators
import (
"fmt"
"log"
"time"
"github.com/aws/amazon-cloudwatch-agent-test/validator/models"
"github.com/aws/amazon-cloudwatch-agent-test/validator/validators/feature"
"github.com/aws/amazon-cloudwatch-agent-test/validator/validators/performance"
"github.com/aws/amazon-cloudwatch-agent-test/validator/validators/stress"
)
func NewValidator(vConfig models.ValidateConfig) (validator models.ValidatorFactory, err error) {
switch vConfig.GetValidateType() {
case "performance":
validator = performance.NewPerformanceValidator(vConfig)
case "feature":
validator = feature.NewFeatureValidator(vConfig)
case "stress":
validator = stress.NewStressValidator(vConfig)
default:
return nil, fmt.Errorf("unknown validation type %s provided by test case %s", vConfig.GetValidateType(), vConfig.GetTestCase())
}
return validator, nil
}
func LaunchValidator(vConfig models.ValidateConfig) error {
var (
agentCollectionPeriod = vConfig.GetAgentCollectionPeriod()
startTimeValidation = time.Now().Truncate(time.Minute).Add(time.Minute)
endTimeValidation = startTimeValidation.Add(agentCollectionPeriod)
durationBeforeNextMinute = time.Until(startTimeValidation)
)
validator, err := NewValidator(vConfig)
if err != nil {
return err
}
log.Printf("Start to sleep %f s for the metric to be available in the beginning of next minute ", durationBeforeNextMinute.Seconds())
time.Sleep(durationBeforeNextMinute)
log.Printf("Start to generate load in %f s for the agent to collect and send all the metrics to CloudWatch within the datapoint period ", agentCollectionPeriod.Seconds())
err = validator.GenerateLoad()
if err != nil {
return err
}
time.Sleep(agentCollectionPeriod)
log.Printf("Start to sleep 120s for CloudWatch to process all the metrics")
time.Sleep(2 * time.Minute)
err = validator.CheckData(startTimeValidation, endTimeValidation)
if err != nil {
return err
}
err = validator.Cleanup()
if err != nil {
return err
}
return nil
}