package ec2
import (
"reflect"
"testing"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape/discoveryutils"
)
func TestDescribeAvailabilityZonesResponse(t *testing.T) {
data := `
e23c5a54-a29c-43ee-8b55-0c13c26e9e01
-
opt-in-not-required
us-west-2a
usw2-az1
available
us-west-2
us-west-2-lax-1
-
us-west-2
opt-in-not-required
us-west-2b
usw2-az2
available
us-west-2
us-west-2-lax-1
`
azr, err := parseAvailabilityZonesResponse([]byte(data))
if err != nil {
t.Fatalf("unexpected error when parsing data: %s", err)
}
azrExpected := &AvailabilityZonesResponse{
AvailabilityZoneInfo: AvailabilityZoneInfo{
Items: []AvailabilityZone{
{
ZoneName: "us-west-2a",
ZoneID: "usw2-az1",
},
{
ZoneName: "us-west-2b",
ZoneID: "usw2-az2",
},
},
},
}
if !reflect.DeepEqual(azr, azrExpected) {
t.Fatalf("unexpected DescribeAvailabilityZonesResponse parsed;\ngot\n%+v\nwant\n%+v", azr, azrExpected)
}
}
func TestParseInstancesResponse(t *testing.T) {
data := `
98667f8e-7fb6-441b-a612-41c6268c6399
-
r-05534f81f74ea7036
793614593844
-
i-0e730b692d9c15460
ami-0eb89db7593b5d434
16
running
ip-172-31-11-152.eu-west-2.compute.internal
ec2-3-8-232-141.eu-west-2.compute.amazonaws.com
my-laptop
0
t2.micro
2020-04-27T09:19:26.000Z
eu-west-2c
default
disabled
subnet-57044c3e
vpc-f1eaad99
172.31.11.152
3.8.232.141
true
-
sg-05d74e4e8551bd020
launch-wizard-1
x86_64
ebs
/dev/sda1
-
/dev/sda1
vol-0153ef24058482522
attached
2020-04-27T09:19:27.000Z
true
hvm
-
foo
bar
xen
-
eni-01d7b338ea037a60b
subnet-57044c3e
vpc-f1eaad99
793614593844
in-use
02:3b:63:46:13:9a
172.31.11.152
ip-172-31-11-152.eu-west-2.compute.internal
true
-
sg-05d74e4e8551bd020
launch-wizard-1
eni-attach-030cc2cdffe745682
0
attached
2020-04-27T09:19:26.000Z
true
3.8.232.141
ec2-3-8-232-141.eu-west-2.compute.amazonaws.com
amazon
-
172.31.11.152
ip-172-31-11-152.eu-west-2.compute.internal
true
3.8.232.141
ec2-3-8-232-141.eu-west-2.compute.amazonaws.com
amazon
false
spot
windows
`
ir, err := parseInstancesResponse([]byte(data))
if err != nil {
t.Fatalf("unexpected error when parsing data: %s", err)
}
irExpected := &InstancesResponse{
ReservationSet: ReservationSet{
Items: []Reservation{
{
OwnerID: "793614593844",
InstanceSet: InstanceSet{
Items: []Instance{
{
PrivateIPAddress: "172.31.11.152",
Architecture: "x86_64",
Placement: Placement{
AvailabilityZone: "eu-west-2c",
},
ID: "i-0e730b692d9c15460",
ImageID: "ami-0eb89db7593b5d434",
Lifecycle: "spot",
State: InstanceState{
Name: "running",
},
Type: "t2.micro",
Platform: "windows",
SubnetID: "subnet-57044c3e",
PrivateDNSName: "ip-172-31-11-152.eu-west-2.compute.internal",
PublicDNSName: "ec2-3-8-232-141.eu-west-2.compute.amazonaws.com",
PublicIPAddress: "3.8.232.141",
VPCID: "vpc-f1eaad99",
NetworkInterfaceSet: NetworkInterfaceSet{
Items: []NetworkInterface{
{
SubnetID: "subnet-57044c3e",
},
},
},
TagSet: TagSet{
Items: []Tag{
{
Key: "foo",
Value: "bar",
},
},
},
},
},
},
},
},
},
}
if !reflect.DeepEqual(ir, irExpected) {
t.Fatalf("unexpected InstancesResponse parsed;\ngot\n%+v\nwant\n%+v", ir, irExpected)
}
rs := ir.ReservationSet.Items[0]
ownerID := rs.OwnerID
port := 423
inst := rs.InstanceSet.Items[0]
labelss := inst.appendTargetLabels(nil, ownerID, port, map[string]string{
"eu-west-2c": "foobar-zone",
})
var sortedLabelss [][]prompbmarshal.Label
for _, labels := range labelss {
sortedLabelss = append(sortedLabelss, discoveryutils.GetSortedLabels(labels))
}
expectedLabels := [][]prompbmarshal.Label{
discoveryutils.GetSortedLabels(map[string]string{
"__address__": "172.31.11.152:423",
"__meta_ec2_architecture": "x86_64",
"__meta_ec2_availability_zone": "eu-west-2c",
"__meta_ec2_availability_zone_id": "foobar-zone",
"__meta_ec2_ami": "ami-0eb89db7593b5d434",
"__meta_ec2_instance_id": "i-0e730b692d9c15460",
"__meta_ec2_instance_lifecycle": "spot",
"__meta_ec2_instance_state": "running",
"__meta_ec2_instance_type": "t2.micro",
"__meta_ec2_owner_id": "793614593844",
"__meta_ec2_platform": "windows",
"__meta_ec2_primary_subnet_id": "subnet-57044c3e",
"__meta_ec2_private_dns_name": "ip-172-31-11-152.eu-west-2.compute.internal",
"__meta_ec2_private_ip": "172.31.11.152",
"__meta_ec2_public_dns_name": "ec2-3-8-232-141.eu-west-2.compute.amazonaws.com",
"__meta_ec2_public_ip": "3.8.232.141",
"__meta_ec2_subnet_id": ",subnet-57044c3e,",
"__meta_ec2_tag_foo": "bar",
"__meta_ec2_vpc_id": "vpc-f1eaad99",
}),
}
if !reflect.DeepEqual(sortedLabelss, expectedLabels) {
t.Fatalf("unexpected labels:\ngot\n%v\nwant\n%v", sortedLabelss, expectedLabels)
}
}