func TestList(t *testing.T) { // TODO this setup is not very clean and could probably be improved var instance0 ec2.Instance var instance1 ec2.Instance var instance2 ec2.Instance var instance3 ec2.Instance //0 tag0 := ec2.Tag{ Key: aws.String("Name"), Value: aws.String("foo"), } instance0.Tags = []*ec2.Tag{&tag0} instance0.PrivateDNSName = aws.String("instance1") state0 := ec2.InstanceState{ Name: aws.String("running"), } instance0.State = &state0 //1 tag1 := ec2.Tag{ Key: aws.String("Name"), Value: aws.String("bar"), } instance1.Tags = []*ec2.Tag{&tag1} instance1.PrivateDNSName = aws.String("instance2") state1 := ec2.InstanceState{ Name: aws.String("running"), } instance1.State = &state1 //2 tag2 := ec2.Tag{ Key: aws.String("Name"), Value: aws.String("baz"), } instance2.Tags = []*ec2.Tag{&tag2} instance2.PrivateDNSName = aws.String("instance3") state2 := ec2.InstanceState{ Name: aws.String("running"), } instance2.State = &state2 //3 tag3 := ec2.Tag{ Key: aws.String("Name"), Value: aws.String("quux"), } instance3.Tags = []*ec2.Tag{&tag3} instance3.PrivateDNSName = aws.String("instance4") state3 := ec2.InstanceState{ Name: aws.String("running"), } instance3.State = &state3 instances := []*ec2.Instance{&instance0, &instance1, &instance2, &instance3} aws := mockInstancesResp(instances) table := []struct { input string expect []string }{ {"blahonga", []string{}}, {"quux", []string{"instance4"}}, {"a", []string{"instance2", "instance3"}}, } for _, item := range table { result, err := aws.List(item.input) if err != nil { t.Errorf("Expected call with %v to succeed, failed with %s", item.input, err) } if e, a := item.expect, result; !reflect.DeepEqual(e, a) { t.Errorf("Expected %v, got %v", e, a) } } }