cmd/udp/udp.go (36 lines of code) (raw):
/*
Copyright (c) Facebook, Inc. and its affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
*/
package udp
import (
"encoding/base64"
"fmt"
"github.com/facebookincubator/fbender/cmd/core/errors"
"github.com/facebookincubator/fbender/cmd/core/input"
"github.com/facebookincubator/fbender/cmd/core/options"
"github.com/facebookincubator/fbender/cmd/core/runner"
"github.com/facebookincubator/fbender/protocols/udp"
tester "github.com/facebookincubator/fbender/tester/udp"
"github.com/spf13/cobra"
)
func params(cmd *cobra.Command, o *options.Options) (*runner.Params, error) {
r, err := input.NewRequestGenerator(o.Input, inputTransformer)
if err != nil {
//nolint:wrapcheck
return nil, err
}
t := &tester.Tester{
Target: o.Target,
Timeout: o.Timeout,
}
return &runner.Params{Tester: t, RequestGenerator: r}, nil
}
func inputTransformer(input string) (interface{}, error) {
var encodedData string
datagram := new(udp.Datagram)
n, err := fmt.Sscanf(input, "%d %s", &datagram.Port, &encodedData)
if err != nil || n < 2 {
return nil, fmt.Errorf("%w, want: \"Port Base64Payload\", got: %q", errors.ErrInvalidFormat, input)
}
datagram.Data, err = base64.StdEncoding.DecodeString(encodedData)
if err != nil {
//nolint:wrapcheck
return nil, err
}
return datagram, nil
}