[
    {
        "id": "983b",
        "name": "Create FQ with default setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "38a1",
        "name": "Create FQ with limit packet setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq limit 3000",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 3000p",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "0a18",
        "name": "Create FQ with flow_limit setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq flow_limit 300",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 300p",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "2390",
        "name": "Create FQ with quantum setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq quantum 9000",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p buckets.*orphan_mask 1023 quantum 9000b",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "845b",
        "name": "Create FQ with initial_quantum setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq initial_quantum 900000",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p buckets.*initial_quantum 900000b",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "10f7",
        "name": "Create FQ with invalid initial_quantum setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq initial_quantum 0x80000000",
        "expExitCode": "2",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root.*initial_quantum 2048Mb",
        "matchCount": "0",
        "teardown": [
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "9398",
        "name": "Create FQ with maxrate setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq maxrate 100000",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p buckets.*maxrate 100Kbit",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "342c",
        "name": "Create FQ with nopacing setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq nopacing",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*nopacing",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "6391",
        "name": "Create FQ with refill_delay setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq refill_delay 100ms",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*refill_delay 100ms",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "238b",
        "name": "Create FQ with low_rate_threshold setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq low_rate_threshold 10000",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*low_rate_threshold 10Kbit",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "7582",
        "name": "Create FQ with orphan_mask setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq orphan_mask 255",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*orphan_mask 255",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "4894",
        "name": "Create FQ with timer_slack setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq timer_slack 100",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*timer_slack 100ns",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "324c",
        "name": "Create FQ with ce_threshold setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq ce_threshold 100",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "424a",
        "name": "Create FQ with horizon time setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq horizon 100",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*horizon 100us",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "89e1",
        "name": "Create FQ with horizon_cap setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq horizon_cap",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*horizon_cap",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "32e1",
        "name": "Delete FQ with valid handle",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true",
            "$TC qdisc add dev $DUMMY handle 1: root fq"
        ],
        "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 1: root",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p",
        "matchCount": "0",
        "teardown": [
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "49b0",
        "name": "Replace FQ with limit setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true",
            "$TC qdisc add dev $DUMMY handle 1: root fq"
        ],
        "cmdUnderTest": "$TC qdisc replace dev $DUMMY handle 1: root fq limit 5000",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 5000p",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    },
    {
        "id": "9478",
        "name": "Change FQ with limit setting",
        "category": [
            "qdisc",
            "fq"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$IP link add dev $DUMMY type dummy || /bin/true",
            "$TC qdisc add dev $DUMMY handle 1: root fq"
        ],
        "cmdUnderTest": "$TC qdisc change dev $DUMMY handle 1: root fq limit 100",
        "expExitCode": "0",
        "verifyCmd": "$TC qdisc show dev $DUMMY",
        "matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 100p",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DUMMY handle 1: root",
            "$IP link del dev $DUMMY type dummy"
        ]
    }
]