#import <Foundation/Foundation.h>
#import <getopt.h>
extern const NSString * const kSCTestGlobalOptionCPU;
extern const NSString * const kSCTestGlobalOptionHelp;
extern const NSString * const kSCTestGlobalOptionTime;
extern const NSString * const kSCTestGlobalOptionVerbose;
extern const NSString * const kSCTestGlobalOptionWait;
extern const NSString * const kSCTestDynamicStoreOptionDNS;
extern const NSString * const kSCTestDynamicStoreOptionIPv4;
extern const NSString * const kSCTestDynamicStoreOptionIPv6;
extern const NSString * const kSCTestDynamicStoreOptionProxies;
extern const NSString * const kSCTestPreferencesServiceList;
extern const NSString * const kSCTestPreferencesServiceOrder;
extern const NSString * const kSCTestConfigAgentDNSDomains;
extern const NSString * const kSCTestConfigAgentDNSServers;
extern const NSString * const kSCTestConfigAgentRemoveDNS;
extern const NSString * const kSCTestConfigAgentFTPProxy;
extern const NSString * const kSCTestConfigAgentGopherProxy;
extern const NSString * const kSCTestConfigAgentHTTPProxy;
extern const NSString * const kSCTestConfigAgentHTTPSProxy;
extern const NSString * const kSCTestConfigAgentProxyMatchDomain;
extern const NSString * const kSCTestConfigAgentRemoveProxy;
extern const NSString * const kSCTestConfigAgentSOCKSProxy;
extern const NSString * const kSCTestReachabilityAddress;
extern const NSString * const kSCTestReachabilityHost;
extern const NSString * const kSCTestReachabilityInterface;
extern const NSString * const kSCTestReachabilityWatch;
extern const NSString * const kSCTestUnitTestCommand;
extern const NSString * const kSCTestUnitTestListTests;
extern const NSString * const kSCTestUnitTestTestMethod;
extern const NSString * const kSCTestUnitTestTestMethodList;
#define kSCTestOptionEntries \
{"cpu", 0, NULL, 0}, \
{"help", 0, NULL, 0}, \
{"time", 0, NULL, 0}, \
{"verbose", 0, NULL, 0}, \
{"wait", 0, NULL, 0}, \
{"dns", 0, NULL, 0}, \
{"ipv4", 0, NULL, 0}, \
{"ipv6", 0, NULL, 0}, \
{"proxies", 0, NULL, 0}, \
{"service_list", 0, NULL, 0}, \
{"service_order", 0, NULL, 0}, \
{"dns_domain", 1, NULL, 0}, \
{"dns_servers", 1, NULL, 0}, \
{"remove_dns", 0, NULL, 0}, \
{"ftp_proxy", 1, NULL, 0}, \
{"gopher_proxy", 1, NULL, 0}, \
{"http_proxy", 1, NULL, 0}, \
{"https_proxy", 1, NULL, 0}, \
{"proxy_match_domain", 1, NULL, 0}, \
{"remove_proxy", 0, NULL, 0}, \
{"socks_proxy", 1, NULL, 0}, \
{"address", 1, NULL, 0}, \
{"host", 1, NULL, 0}, \
{"interface", 1, NULL, 0}, \
{"watch", 0, NULL, 0}, \
{"command", 1, NULL, 0}, \
{"list_tests", 0, NULL, 0}, \
{"test_method", 1, NULL, 0}, \
{"test_method_list", 0, NULL, 0}, \
{NULL, 0, NULL, 0},
#define kSCTestOptionHelp \
"\n============== global options =============\n"\
"-cpu : Prints the CPU usage after the test completes\n"\
"-help : Prints this very useful help!\n"\
"-time : Prints the time elapsed since the test was launched\n"\
"-verbose : Enables verbose mode\n"\
"-wait : Results in a wait for 'sctest'\n"\
"\n============== dynamic_store options =============\n"\
"-dns : Prints the global DNS information from the SCDynamicStore\n"\
"-ipv4 : Prints the global IPv4 information from the SCDynamicStore\n"\
"-ipv6 : Prints the global IPv6 information from the SCDynamicStore\n"\
"-proxies : Prints the global Proxy information from the SCDynamicStore\n"\
"\n============== preferences options =============\n"\
"-service_list : Prints the Network Services list from the preferences\n"\
"-service_order : Prints the Network Service order from the preferences\n"\
"\n============== config_agent options =============\n"\
"-dns_domain : Configures the DNS Servers for certain domains. A comma-separated list of domains can be specified. Default is 'apple.com'\n"\
"-dns_servers : Configures the specified DNS Servers. A comma-separated list of IP Addresses can be specified\n"\
"-remove_dns : Remove a dns configuration, previously configured via 'sctest'\n"\
"-ftp_proxy : Add a proxy agent with FTP proxy. Format of the argument is 'server:port'\n"\
"-gopher_proxy : Add a proxy agent with Gopher proxy. Format of the argument is 'server:port'\n"\
"-http_proxy : Add a proxy agent with HTTP proxy. Format of the argument is 'server:port'\n"\
"-https_proxy : Add a proxy agent with HTTPS proxy. Format of the argument is 'server:port'\n"\
"-proxy_match_domain : Configures the Proxy server for certain domains. A comma-separated list of domains can be specified. Default is 'apple.com'\n"\
"-remove_proxy : Remove a proxy configuration, previously configured via 'sctest'\n"\
"-socks_proxy : Add a proxy agent with SOCKS proxy. Format of the argument is 'server:port'\n"\
"\n============== reachability options =============\n"\
"-address : Determine reachability to this address\n"\
"-host : Determine reachability to this host\n"\
"-interface : Determine reachability when scoped to this interface\n"\
"-watch : Watch for reachability changes\n"\
"\n============== unit_test options =============\n"\
"-command : Run a unit test for a specific command. If this option is not specified, unit-tests for all commands will be run\n"\
"-list_tests : List the test commands in a JSON format. This is for NPT compliance\n"\
"-test_method : Runs a specific unit test. List can be obtained by using the 'test_method_list' option\n"\
"-test_method_list : Lists all the unit tests. A specific one can be run using the 'test_method' option\n"\