func validate()

in integ/s3/validate-and-clean.go [132:212]


func validate(s3Client *s3.S3, prefix string, bucket string, testFile string, numEvents int) (bool, bool) {
	response := getS3Objects(s3Client, bucket, prefix)
	if response == nil {
		return false, true
	}

	
	logCounter := make([]int, numEvents)
	for index := range logCounter {
		logCounter[index] = 1
	}

	for i := range response.Contents {
		input := &s3.GetObjectInput{
			Bucket: aws.String(bucket),
			Key:    response.Contents[i].Key,
		}
		obj := getS3Object(s3Client, input)
		if obj == nil {
			return false, true
		}

		dataByte, err := ioutil.ReadAll(obj.Body)
		if err != nil {
			fmt.Fprintf(os.Stderr,"[TEST FAILURE] Error to parse GetObject response. %v", err)
			return false, true
		}

		data := strings.Split(string(dataByte), "\n")

		for _, d := range data {
			if d == "" {
				continue
			}
			if len(d) > 500 {
				continue
			}

			var message Message

			decodeError := json.Unmarshal([]byte(d), &message)
			if decodeError != nil {
				fmt.Fprintf(os.Stderr,"[TEST FAILURE] Json Unmarshal Error:", decodeError)
				return false, false
			}

			if runtime.GOOS == "windows" {
				// On Windows, we would have additional \r which needs to be stripped.
				message.Log = strings.ReplaceAll(message.Log, "\r", "")
			}

			number, convertionError := strconv.Atoi(message.Log)
			if convertionError != nil {
				fmt.Fprintf(os.Stderr,"[TEST FAILURE] String to Int convertion Error:", convertionError)
				return false, false
			}

			if number < 0 || number >= numEvents {
				fmt.Fprintf(os.Stderr,"[TEST FAILURE] Invalid number: %d found. Expected value in range (0 - %d)", number, numEvents)
				return false, false
			}

			logCounter[number] = 0
		}

	}
	sum := 0
	for i := range logCounter {
		sum += logCounter[i]
	}

	if sum > 0 {
		fmt.Fprintf(os.Stderr,"[TEST FAILURE] Validation Failed. Number of missing log records: %d", sum)
		return false, false
	} else {
		fmt.Println("[TEST SUCCESSFULL] Found all the log records.")
		// The file was created when the integ test started. Removing this file as a flag of test success.
		os.Remove(filepath.Join("/out", testFile))
		return true, false
	}
}