[
    {
        "id": "d710",
        "name": "Release tail references after first action deletion fails",
        "category": [
            "actions",
            "gact"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            [
                "$TC actions flush action gact",
                0,
                1,
                255
            ],
            "$TC qdisc add dev $DEV1 ingress",
            "$TC actions add action pass index 1",
            "$TC actions add action pass index 2",
            "$TC actions add action pass index 3",
            "$TC filter add dev $DEV1 protocol ip ingress u32 match u32 0 0 action gact index 1"
        ],
        "cmdUnderTest": "$TC actions del action gact index 1 action gact index 2 action gact index 3",
        "expExitCode": "255",
        "verifyCmd": "$TC actions ls action gact",
        "matchPattern": "total acts 3\\b.*index 1 ref 2 bind 1\\b.*index 2 ref 1 bind 0\\b.*index 3 ref 1 bind 0\\b",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress",
            [
                "$TC actions flush action gact",
                0,
                1,
                255
            ]
        ]
    },
    {
        "id": "d711",
        "name": "Release tail references after middle action deletion fails",
        "category": [
            "actions",
            "gact"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            [
                "$TC actions flush action gact",
                0,
                1,
                255
            ],
            "$TC qdisc add dev $DEV1 ingress",
            "$TC actions add action pass index 1",
            "$TC actions add action pass index 2",
            "$TC actions add action pass index 3",
            "$TC filter add dev $DEV1 protocol ip ingress u32 match u32 0 0 action gact index 2"
        ],
        "cmdUnderTest": "$TC actions del action gact index 1 action gact index 2 action gact index 3",
        "expExitCode": "255",
        "verifyCmd": "$TC actions ls action gact",
        "matchPattern": "total acts 2\\b.*index 2 ref 2 bind 1\\b.*index 3 ref 1 bind 0\\b",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress",
            [
                "$TC actions flush action gact",
                0,
                1,
                255
            ]
        ]
    },
    {
        "id": "d713",
        "name": "Delete a tail action once after a failed batch",
        "category": [
            "actions",
            "gact"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            [
                "$TC actions flush action gact",
                0,
                1,
                255
            ],
            "$TC qdisc add dev $DEV1 ingress",
            "$TC actions add action pass index 1",
            "$TC actions add action pass index 2",
            "$TC filter add dev $DEV1 protocol ip ingress u32 match u32 0 0 action gact index 1"
        ],
        "cmdUnderTest": "$TC actions del action gact index 1 action gact index 2",
        "expExitCode": "255",
        "verifyCmd": "sh -c '$TC actions del action gact index 2 && $TC actions ls action gact'",
        "matchPattern": "total acts 1\\b.*index 1 ref 2 bind 1\\b",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 ingress",
            [
                "$TC actions flush action gact",
                0,
                1,
                255
            ]
        ]
    }
]
