CDRouter Support

Testsuites

cdrouter-web-api version 12.7

Get testsuite info

Get testsuite info.

GET /api/v1/testsuites/{id}/
Response 200 OK
{
    "timestamp": "2016-04-18T15:53:04.590283978-04:00",
    "data": {
        "id": 1,
        "build_info": "Version 10.0 build 2 (21513), built 2016-04-04 14:13:19 by build@cdr-forge6.lan (x86_64)",
        "copyright": "Copyright (c) 2001-2016 by QA Cafe",
        "customer": "company name",
        "lifetime": "2018-06-11",
        "os": "Linux 3.10.0-327.10.1.el7.x86_64 x86_64",
        "serial_number": "",
        "system_id": "deadbeefbdeadbeefdeadbeefdeadbee",
        "testsuite": "cdrouter",
        "release": "10.0.2",
        "addons": [
            "multiport",
            "ipv6",
            "storage",
            "ike",
            "tr69",
            "tr69-edm",
            "nmap",
            "bbf.069",
            "snmp",
            "performance"
        ],
        "all_addons": [
            "multiport",
            "ipv6",
            "storage",
            "ike",
            "tr69",
            "tr69-edm",
            "nmap",
            "bbf.069",
            "viewer",
            "snmp",
            "performance"
        ]
    }
}

Search testsuite

Perform full text search of testsuite.

GET /api/v1/testsuites/{id}/search?q

URL Parameters

Name Description
q string (required) Search query text.
Response 200 OK

Response may contain addons, modules, tests, reasons, errors and testvars arrays containing entries matching the search query.

{
    "timestamp": "2016-04-18T16:26:46.065696921-04:00",
    "data": {
        "reasons": [
            {
                "id": 1,
                "name": "requires-lan-interface",
                "index": 133,
                "reason": "No LAN interface is configured, skipping all tests that require at least one LAN interface",
                "description": "No LAN interface is configured. All tests that require end-to-end connectivity\nor LAN specific functionality will be automatically skipped. To run these tests\nplease connect at least one port on the CDRouter system to the DUT and configure\nthe testvar lanInterface with the interface name.",
                "modules": [
                ],
                "tests": [
                    "cdrouter_basic_1",
                    "cdrouter_basic_10",
                    "cdrouter_basic_20",
                    ...
                ]
            }
        ],
        "errors": [
            {
                "id": 1,
                "name": "linux-address-configured-on-interface",
                "index": 9,
                "description": "CDRouter encountered an error while trying to open an interface\nspecified by lanInterface/wanInterface.  The interface has an address\nconfigured under Linux (see `/sbin/ifconfig -a`).  CDRouter interfaces\nshould not have any IP addresses configured under Linux.  CDRouter\nwill bring up and configure interfaces automatically based on your\nCDRouter configuration file.  Your Linux system configuration may not\nbe compatible with CDRouter.  Please see the test log for details.\n\nPlease see this [Knowledge Base article] [1] for more help.\n\n[1]: https://support.qacafe.com/knowledge-base/how-should-i-configure-my-ethernet-interfaces-for-cdrouter-demo/ \"How should I configure my Ethernet interfaces for CDRouter?\""
            },
            {
                "id": 1,
                "name": "mp-no-additional-lan-interface",
                "index": 10,
                "description": "Some tests require more than one LAN client to run.  CDRouter\nMultiport will automatically cycle through additional LAN interfaces\nwhen creating new LAN clients for tests that require them to allow all\nphysical interfaces to be utilized.  CDRouter was unable to find an\nadditional LAN interface and aborted the package run.\n\nIf this interface is wireless, this test must be skipped as CDRouter\ndoes not currently support creating multiple LAN clients on the same\nwireless interface.  You can also set useSameLanInterface to 'yes' to\nprevent CDRouter Multiport from cycling LAN interfaces between test\ncases.\n\nPlease see the [Using CDRouter Multiport] [1] section of the CDRouter\nUser Guide for more information.\n\n[1]: http://support.qacafe.com/user-guide/cdrouter-user-guide/#using-cdrouter-multiport \"Using CDRouter Multiport\""
            },
            {
                "id": 1,
                "name": "no-link-ethernet-interface",
                "index": 17,
                "description": "In its start procedure, CDRouter ensures that all Ethernet interfaces\nspecified by lanInterface/wanInterface have link.  The link on one of\nthe Ethernet interfaces used by CDRouter did not come up (no carrier)\nwithin startTimeout seconds and CDRouter aborted the package run.\nPlease check Ethernet cable on the corresponding interface."
            },
        ],
        "testvars": [
            {
                "id": 1,
                "name": "laninterface",
                "index": 347,
                "humanname": "DUT LAN Interface",
                "display": "lanInterface",
                "dataclass": "interface",
                "addedin": "",
                "deprecatedin": "",
                "obsoletedin": "",
                "min": "",
                "max": "",
                "length": "",
                "description": "This option specifies the network interface CDRouter will use as its\nprimary LAN test interface. This interface must be physically\nconnected to one of the DUT's LAN interfaces. Any Ethernet network\ninterface that is properly installed in the Linux host system may be\nused. Certain 802.11 a/b/g/n wireless network interfaces may also be\nused. Please contact support@qacafe.com for more information on selecting and installing a suitable wireless\nnetwork interface for use with CDRouter.\n\nNote that all network interfaces used by CDRouter must be configured\nwith a static IP address of 0.0.0.0 in the Linux host system. CDRouter\nwill automatically configure the IP addresses of all test interfaces\nbased on the configuration options specified here. Please see this\n[Knowledge Base article](https://support.qacafe.com/knowledge-base/how-should-i-configure-my-ethernet-interfaces-for-cdrouter-demo/)\nfor more information.\n\nFor certain device types and test setups a LAN test interface is not\nrequired. Beginning in CDRouter 9.2, the LAN test interface may be disabled\nby setting this testvar to  the keyword **none**.",
                "default": "eth1",
                "defaultdisabled": false,
                "dyndefault": false,
                "keywords": [],
                "alsoaccept": [],
                "wildcard": false,
                "instances": 0,
                "parent": "",
                "children": [],
                "tests": []
            },
            {
                "id": 1,
                "name": "lanmac",
                "index": 349,
                "humanname": "MAC Address",
                "display": "lanMac",
                "dataclass": "mac-address",
                "addedin": "",
                "deprecatedin": "",
                "obsoletedin": "",
                "min": "",
                "max": "",
                "length": "",
                "description": "This parameter specifies the MAC address CDRouter will use for the primary\nLAN client on this LAN test interface. This value must be unique and\ncannot be set to the MAC address of the underlying physical interface specified\nby the testvar lanInterface. If not specified, a random MAC address will be\nenerated using the OUI specified by the cdrouterOui testvar.\n\nAny additional LAN hosts that are created during test cases will also\nautomatically generate a MAC address using the cdrouterOui value.",
                "default": "b0:75:0c:00:00:01",
                "defaultdisabled": true,
                "dyndefault": false,
                "keywords": [],
                "alsoaccept": [],
                "wildcard": false,
                "instances": 0,
                "parent": "",
                "children": [],
                "tests": []
            },
            {
                "id": 1,
                "name": "usesamelaninterface",
                "index": 674,
                "humanname": "",
                "display": "useSameLanInterface",
                "dataclass": "keyword-list",
                "addedin": "",
                "deprecatedin": "",
                "obsoletedin": "",
                "min": "",
                "max": "",
                "length": "",
                "description": "If this testvar is set to no, CDRouter will change LAN interfaces each\ntime a test is run when multiple LAN interfaces are configured. You\ncan disable this behavior by configuring the testvar\nuseSameLanInterface to yes. This is a global testvar that should not\nbe configured within a testvar_group.",
                "default": "no",
                "defaultdisabled": false,
                "dyndefault": false,
                "keywords": [
                    "yes",
                    "no"
                ],
                "alsoaccept": [],
                "wildcard": false,
                "instances": 0,
                "parent": "",
                "children": [],
                "tests": []
            }
        ]
    }
}

List groups

Get a list of groups.

GET /api/v1/testsuites/{id}/groups/

URL Parameters

Name Description
filter string (optional) See Filtering
sort string (optional) See Sorting
Response 200 OK
{
    "timestamp": "2016-04-18T16:34:04.956771947-04:00",
    "data": [
        {
            "id": 1,
            "name": "CDRouter",
            "index": 0,
            "test_count": 623,
            "modules": [
                "basic.tcl",
                "dhcp-c.tcl",
                "pppoe-c.tcl",
                "pppoa-c.tcl",
                "pptp-c.tcl",
                "l2tp-c.tcl",
                "chap.tcl",
                "mac-filter.tcl",
                "dhcp-s.tcl",
                "nat.tcl",
                "nat-timeout.tcl",
                "renum-dhcp.tcl",
                "renum-pppoe.tcl",
                "renum-pppoa.tcl",
                "renum-pptp.tcl",
                "renum-l2tp.tcl",
                "icmp.tcl",
                "firewall.tcl",
                "firewall-out.tcl",
                "apps.tcl",
                "ipsecpt.tcl",
                "forward.tcl",
                "jumbo.tcl",
                "rip.tcl",
                "scaling.tcl",
                "vservice.tcl",
                "url-filter.tcl",
                "triggerp.tcl",
                "upnp.tcl",
                "pptp-pt.tcl",
                "l2tp-pt.tcl",
                "eapol.tcl",
                "eap-md5.tcl",
                "eap-tls.tcl",
                "eap-wep.tcl",
                "eap-radius.tcl",
                "pppoe-pt.tcl",
                "ipsec-esp.tcl",
                "dmz.tcl",
                "mcast.tcl",
                "dyndns.tcl",
                "sip-alg.tcl",
                "sip-alg-tcp.tcl",
                "dns.tcl",
                "dns-tcp.tcl",
                "mdns.tcl",
                "dns-rfc5625.tcl",
                "static.tcl",
                "dos.tcl",
                "xbox.tcl",
                "sctp.tcl",
                "lldp.tcl",
                "rfc5508.tcl",
                "rfc4787.tcl",
                "http.tcl",
                "https.tcl",
                "heartbleed.tcl",
                "ssl.tcl"
            ]
        },
        {
            "id": 1,
            "name": "Multiport",
            "index": 1,
            "test_count": 73,
            "modules": [
                "nat-mp.tcl",
                "rip-wan.tcl",
                "wan-fail.tcl",
                "forward-mp.tcl",
                "jumbo-mp.tcl",
                "lan-mp.tcl",
                "nat-static.tcl",
                "guest.tcl",
                "lan-mp-v6.tcl",
                "rip-ng-wan.tcl",
                "forward-v6-mp.tcl",
                "jumbo-v6-mp.tcl",
                "guest-v6.tcl"
            ]
        },
        {
            "id": 1,
            "name": "Custom",
            "index": 10,
            "test_count": 0,
            "modules": []
        }
    ]
}

Get a group

Get a group.

GET /api/v1/testsuites/{id}/groups/{name}

Response 200 OK
{
    "timestamp": "2016-04-18T16:36:42.55547752-04:00",
    "data": {
        "id": 1,
        "name": "CDRouter",
        "index": 0,
        "test_count": 623,
        "modules": [
            "basic.tcl",
            "dhcp-c.tcl",
            "pppoe-c.tcl",
            "pppoa-c.tcl",
            "pptp-c.tcl",
            "l2tp-c.tcl",
            "chap.tcl",
            "mac-filter.tcl",
            "dhcp-s.tcl",
            "nat.tcl",
            "nat-timeout.tcl",
            "renum-dhcp.tcl",
            "renum-pppoe.tcl",
            "renum-pppoa.tcl",
            "renum-pptp.tcl",
            "renum-l2tp.tcl",
            "icmp.tcl",
            "firewall.tcl",
            "firewall-out.tcl",
            "apps.tcl",
            "ipsecpt.tcl",
            "forward.tcl",
            "jumbo.tcl",
            "rip.tcl",
            "scaling.tcl",
            "vservice.tcl",
            "url-filter.tcl",
            "triggerp.tcl",
            "upnp.tcl",
            "pptp-pt.tcl",
            "l2tp-pt.tcl",
            "eapol.tcl",
            "eap-md5.tcl",
            "eap-tls.tcl",
            "eap-wep.tcl",
            "eap-radius.tcl",
            "pppoe-pt.tcl",
            "ipsec-esp.tcl",
            "dmz.tcl",
            "mcast.tcl",
            "dyndns.tcl",
            "sip-alg.tcl",
            "sip-alg-tcp.tcl",
            "dns.tcl",
            "dns-tcp.tcl",
            "mdns.tcl",
            "dns-rfc5625.tcl",
            "static.tcl",
            "dos.tcl",
            "xbox.tcl",
            "sctp.tcl",
            "lldp.tcl",
            "rfc5508.tcl",
            "rfc4787.tcl",
            "http.tcl",
            "https.tcl",
            "heartbleed.tcl",
            "ssl.tcl"
        ]
    }
}

List modules

Get a list of modules.

GET /api/v1/testsuites/{id}/modules/

URL Parameters

Name Description
filter string (optional) See Filtering
sort string (optional) See Sorting
Response 200 OK
{
    "timestamp": "2016-04-18T16:36:42.561088347-04:00",
    "data": [
        {
            "id": 1,
            "name": "apps.tcl",
            "group": "CDRouter",
            "description": "Application layer gateway (ALG) tests for FTP, DNS, TFTP, SMTP, POP3, MSN, RTSP and others",
            "test_count": 47,
            "tests": [
                "cdrouter_app_2",
                "cdrouter_app_3",
                "cdrouter_app_10",
                "cdrouter_app_11",
                "cdrouter_app_12",
                "cdrouter_app_14",
                "cdrouter_app_15",
                "cdrouter_app_16",
                "cdrouter_app_17",
                "cdrouter_app_18",
                "cdrouter_app_20",
                "cdrouter_app_21",
                "cdrouter_app_22",
                "cdrouter_app_25",
                "cdrouter_app_26",
                "cdrouter_app_27",
                "cdrouter_app_28",
                "cdrouter_app_30",
                "cdrouter_app_100",
                "cdrouter_app_110",
                "cdrouter_app_120",
                "cdrouter_app_122",
                "cdrouter_app_124",
                "cdrouter_app_126",
                "cdrouter_app_130",
                "cdrouter_app_131",
                "cdrouter_app_200",
                "cdrouter_app_205",
                "cdrouter_app_207",
                "cdrouter_app_220",
                "cdrouter_app_225",
                "cdrouter_app_227",
                "cdrouter_app_302",
                "cdrouter_app_305",
                "cdrouter_app_310",
                "cdrouter_rtsp_1",
                "cdrouter_rtsp_2",
                "cdrouter_rtsp_10",
                "cdrouter_rtsp_20",
                "cdrouter_rtsp_21",
                "cdrouter_rtsp_22",
                "cdrouter_rtsp_30",
                "cdrouter_rtsp_50",
                "cdrouter_rtsp_60",
                "cdrouter_rtsp_70",
                "cdrouter_mptcp_1",
                "cdrouter_mptcp_2"
            ]
        },
        {
            "id": 1,
            "name": "basic.tcl",
            "group": "CDRouter",
            "description": "Initial connectivity tests to verify ARP and DHCP client are connected",
            "test_count": 4,
            "tests": [
                "cdrouter_basic_1",
                "cdrouter_basic_2",
                "cdrouter_basic_10",
                "cdrouter_basic_20"
            ]
        },
        {
            "id": 1,
            "name": "chap.tcl",
            "group": "CDRouter",
            "description": "PPP CHAP tests for PPP based protocols on the WAN (PPPoE, PPPoA, PPTP)",
            "test_count": 2,
            "tests": [
                "cdrouter_chap_10",
                "cdrouter_chap_20"
            ]
        }
    ]
}

Get a module

Get a module.

GET /api/v1/testsuites/{id}/modules/{name}

Response 200 OK
{
    "timestamp": "2016-04-18T16:40:41.150771661-04:00",
    "data": {
        "id": 1,
        "name": "basic.tcl",
        "index": 0,
        "group": "CDRouter",
        "description": "Initial connectivity tests to verify ARP and DHCP client are connected",
        "test_count": 4,
        "tests": [
            "cdrouter_basic_1",
            "cdrouter_basic_2",
            "cdrouter_basic_10",
            "cdrouter_basic_20"
        ],
        "labels": [
            "all",
            "requires-ipv4"
        ]
    }
}

List tests

Get a list of tests.

GET /api/v1/testsuites/{id}/tests/

URL Parameters

Name Description
filter string (optional) See Filtering
sort string (optional) See Sorting
Response 200 OK
{
    "timestamp": "2016-04-18T16:42:41.024029561-04:00",
    "data": [
        {
            "id": 1,
            "name": "cdrouter_basic_1",
            "index": 0,
            "group": "CDRouter",
            "module": "basic.tcl",
            "synopsis": "Router responds to ARP Request on LAN interface"
        },
        {
            "id": 1,
            "name": "cdrouter_basic_2",
            "index": 1,
            "group": "CDRouter",
            "module": "basic.tcl",
            "synopsis": "Router responds to ARP Request on WAN interface"
        },
        {
            "id": 1,
            "name": "cdrouter_basic_10",
            "index": 2,
            "group": "CDRouter",
            "module": "basic.tcl",
            "synopsis": "Verify LAN DHCP clients receive gateway/DNS configuration from WAN side"
        }
    ]
}

Get a test

Get a test.

GET /api/v1/testsuites/{id}/tests/{name}
Response 200 OK
{
    "timestamp": "2016-04-18T16:44:15.299457901-04:00",
    "data": {
        "id": 1,
        "name": "cdrouter_basic_1",
        "index": 0,
        "group": "CDRouter",
        "module": "basic.tcl",
        "synopsis": "Router responds to ARP Request on LAN interface",
        "description": "\n\n    step 1. ...",
        "labels": [
            "all",
            "requires-ipv4",
            "requires-lan-interface"
        ],
        "testvars": []
    }
}

List labels

Get a list of labels.

GET /api/v1/testsuites/{id}/labels/

URL Parameters

Name Description
filter string (optional) See Filtering
sort string (optional) See Sorting
Response 200 OK
{
    "timestamp": "2016-04-18T16:47:24.143022892-04:00",
    "data": [
        {
            "id": 1,
            "name": "ftp-non-anonymous-v4",
            "reason": "No IPv4 FTP users are configured, skipping FTP tests that require at least one configured FTP user"
        },
        {
            "id": 1,
            "name": "ftp-non-anonymous-v6",
            "reason": "No IPv4 FTP users are configured, skipping FTP tests that require at least one configured FTP user"
        }
    ]
}

Get a label

Get a label.

GET /api/v1/testsuites/{id}/labels/{name}

URL Parameters

Name Description
linkify string (optional) If given, linkify testvar names in description fields. Choices: html (HTML links), md (Markdown links)
Response 200 OK
{
    "timestamp": "2016-04-18T16:49:11.312872024-04:00",
    "data": {
        "id": 1,
        "name": "ftp-non-anonymous-v4",
        "index": 1,
        "reason": "No IPv4 FTP users are configured, skipping FTP tests that require at least one configured FTP user",
        "description": "These tests require the configuration of at least one non-anonymous IPv4 FTP\nuser. Please see the [CDRouter Storage User Guide](http://support.qacafe.com/user-guide/cdrouter-storage-user-guide)\nfor more information.",
        "modules": [],
        "tests": [
            "ftp_30",
            "ftp_31",
            "ftp_wan_30",
            "ftp_wan_31",
            "ftps_30",
            "ftps_31",
            "ftps_wan_30",
            "ftps_wan_31"
        ]
    }
}

List errors

Get a list of errors.

GET /api/v1/testsuites/{id}/errors/

URL Parameters

Name Description
filter string (optional) See Filtering
sort string (optional) See Sorting
Response 200 OK
{
    "timestamp": "2016-04-18T16:51:06.620682909-04:00",
    "data": [
        {
            "id": 1,
            "name": "acs-tcp-offload-port-in-use"
        },
        {
            "id": 1,
            "name": "eapol-authentication-failed"
        },
        {
            "id": 1,
            "name": "incompatible-package-versions"
        }
    ]
}

Get an error

Get an error.

GET /api/v1/testsuites/{id}/errors/{name}

URL Parameters

Name Description
linkify string (optional) If given, linkify testvar names in description fields. Choices: html (HTML links), md (Markdown links)
Response 200 OK
{
    "timestamp": "2016-04-18T16:51:46.791218048-04:00",
    "data": {
        "id": 1,
        "name": "eapol-authentication-failed",
        "index": 1,
        "description": "802.1X/EAPOL is enabled on one or more LAN interfaces, but\nauthentication failed.  Please verify that 802.1X is enabled on the DUT\nand that the DUT's LAN security mode and settings are consistent with\nCDRouter's lanSecurity testvar associated configuration options.\n\nPlease see the [LAN Configuration] [1] section of the CDRouter User \nGuide for more information.\n\n[1]: http://support.qacafe.com/user-guide/cdrouter-user-guide/#lan-configuration \"LAN Configuration\""
    }
}

List testvars

Get a list of testvars.

GET /api/v1/testsuites/{id}/testvars/

URL Parameters

Name Description
filter string (optional) See Filtering
sort string (optional) See Sorting
Response 200 OK
{
    "timestamp": "2016-04-18T16:54:34.715359597-04:00",
    "data": [
        {
            "id": 1,
            "name": "acsauth",
            "display": "acsAuth",
            "dataclass": "keyword-list",
            "description": "This option specifies the type of http authentication utilized by the\nCDRouter ACS, either digest, basic, or null.",
            "default": "digest",
            "defaultdisabled": false
        },
        {
            "id": 1,
            "name": "acsauthoncepersession",
            "display": "acsAuthOncePerSession",
            "dataclass": "keyword-list",
            "description": "When configured to \"yes\", the ACS will only request authentication for\nthe first CWMP request in the same TCP session. Other requests do not\nrequire authentication. This mode allows the CDRouter ACS to act\nsimilar to other ACS vendors which only authenticate the first request\nin a session.",
            "default": "no",
            "defaultdisabled": false
        },
        {
            "id": 1,
            "name": "acscacertpath",
            "display": "acsCaCertPath",
            "dataclass": "word",
            "description": "This testvar can be used to specify the location to a file on disk\ncontaining any intermediate CAs required to validate the server\ncertificate specified by the testvar acsCertPath. This testvar is\nneeded if you are using intermediate CAs that are not already\ninstalled on the CPE.",
            "default": "/usr/share/doc/cdrouter/acs.cdroutertest.com-ca.pem",
            "defaultdisabled": false
        }
    ]
}

Get a testvar

Get a testvar.

GET /api/v1/testsuites/{id}/testvars/{name}

URL Parameters

Name Description
group string (optional) Get a testvar specific to the given testvar group.
linkify string (optional) If given, linkify testvar names in description fields. Choices: html (HTML links), md (Markdown links)
Response 200 OK
{
    "timestamp": "2016-04-18T16:55:12.530343329-04:00",
    "data": {
        "id": 1,
        "name": "acsauth",
        "index": 0,
        "humanname": "ACS Authentication",
        "display": "acsAuth",
        "dataclass": "keyword-list",
        "addedin": "",
        "deprecatedin": "",
        "obsoletedin": "",
        "min": "",
        "max": "",
        "length": "",
        "description": "This option specifies the type of http authentication utilized by the\nCDRouter ACS, either digest, basic, or null.",
        "default": "digest",
        "defaultdisabled": false,
        "dyndefault": false,
        "keywords": [
            "null",
            "basic",
            "digest"
        ],
        "alsoaccept": [],
        "wildcard": false,
        "instances": 0,
        "parent": "",
        "children": [],
        "tests": [
            "od128_test_1.1",
            "od128_test_1.2",
            "od128_test_2.1",
            "od128_test_2.2",
            "od128_test_2.3",
            "od128_test_2.4",
            "od128_test_26.1"
        ]
    }
}

Get a testvar’s completions

Get completions for a testvar’s value.

GET /api/v1/testsuites/{id}/testvars/{name}/values

URL Parameters

Name Description
group string (optional) Get completions for a testvar specific to the given testvar group.
match string (optional) If given, returned completions must start with this string.

Example

Return completions for testvar wanMode:

GET /api/v1/testsuites/{id}/testvars/wanMode/values

Return completions for testvar wanMode which begin with PPPo:

GET /api/v1/testsuites/{id}/testvars/wanMode/values?match=PPPo

Return completions for testvar permission in testvar group smbuser:

GET /api/v1/testsuites/{id}/testvars/permission/values?group=smbuser
Response 200 OK
{
    "timestamp": "2016-04-18T17:04:28.077997838-04:00",
    "data": [
        "DHCP",
        "static",
        "PPPoE",
        "PPPoA",
        "PPTP",
        "L2TP",
        "dslite",
        "none"
    ]
}

Contents

×

About CDRouter

CDRouter is made by QA Cafe, a technology company based in Portsmouth, NH.

Get in touch via our Contact page or by following us on your favorite service: