Terraform 0.11 - Unit Testing

इकाई का परीक्षण




terraform

इकाई का परीक्षण

छोटे, अलग-अलग इकाइयों में परीक्षण प्लगइन कोड स्वीकृति टेस्ट से अलग है, और इसके लिए नेटवर्क कनेक्शन की आवश्यकता नहीं है। यूनिट परीक्षण आमतौर पर हेल्पर विधियों के परीक्षण के लिए उपयोग किए जाते हैं जो टेराफॉर्म द्वारा राज्य में भंडारण के लिए डेटा संरचनाओं में एपीआई प्रतिक्रियाओं का विस्तार या सपाट करते हैं। यह खंड Terraform Plugin कोड के लिए Unit टेस्ट लिखने की बारीकियों को शामिल करता है।

टेराफॉर्म के लिए यूनिट टेस्ट लिखने की प्रक्रिया उसी गो सेटअप और किसी भी गो यूनिट टेस्ट लिखने की परंपराओं का पालन करती है। हम अपने स्वीकार्यता परीक्षण, Test<Provider>_<Test Name> रूप में एक ही सम्मेलन का पालन करने के लिए नामकरण परीक्षणों की सलाह देते हैं। गो परीक्षणों की अधिक जानकारी के लिए, परीक्षण पर आधिकारिक गोलांग डॉक्स देखें।

नीचे एक उदाहरण इकाई परीक्षण का उपयोग AWS सुरक्षा समूह के नियमों को समतल करने में किया गया है, जो एक विशिष्ट flattener प्रकार की विधि का प्रदर्शन करता है जो आमतौर पर एपीआई से लौटी संरचनाओं को टेराफॉर्म द्वारा उपयोग किए जाने वाले डेटा संरचनाओं में परिवर्तित करने के लिए उपयोग किया जाता है। इस उदाहरण को संक्षिप्तता के लिए छोटा किया गया है, लेकिन आप GITHUb पर Terraform AWS प्रदाता रिपॉजिटरी में aws / संरचना_test.go में पूर्ण परीक्षा देख सकते हैं

func TestFlattenSecurityGroups(t *testing.T) {
    cases := []struct {
        ownerId  *string
        pairs    []*ec2.UserIdGroupPair
        expected []*GroupIdentifier
    }{
        // simple, no user id included
        {
            ownerId: aws.String("user1234"),
            pairs: []*ec2.UserIdGroupPair{
                &ec2.UserIdGroupPair{
                    GroupId: aws.String("sg-12345"),
                },
            },
            expected: []*GroupIdentifier{
                &GroupIdentifier{
                    GroupId: aws.String("sg-12345"),
                },
            },
        },
        // include the owner id, but keep it consitent with the same account. Tests
        // EC2 classic situation
        {
            ownerId: aws.String("user1234"),
            pairs: []*ec2.UserIdGroupPair{
                &ec2.UserIdGroupPair{
                    GroupId: aws.String("sg-12345"),
                    UserId:  aws.String("user1234"),
                },
            },
            expected: []*GroupIdentifier{
                &GroupIdentifier{
                    GroupId: aws.String("sg-12345"),
                },
            },
        },

        // include the owner id, but from a different account. This is reflects
        // EC2 Classic when referring to groups by name
        {
            ownerId: aws.String("user1234"),
            pairs: []*ec2.UserIdGroupPair{
                &ec2.UserIdGroupPair{
                    GroupId:   aws.String("sg-12345"),
                    GroupName: aws.String("somegroup"), // GroupName is only included in Classic
                    UserId:    aws.String("user4321"),
                },
            },
            expected: []*GroupIdentifier{
                &GroupIdentifier{
                    GroupId:   aws.String("sg-12345"),
                    GroupName: aws.String("user4321/somegroup"),
                },
            },
        },
    }

    for _, c := range cases {
        out := flattenSecurityGroups(c.pairs, c.ownerId)
        if !reflect.DeepEqual(out, c.expected) {
            t.Fatalf("Error matching output and expected: %#v vs %#v", out, c.expected)
        }
    }
}