def __init__(self, server):
     if server == 'mob':
         self.host = gconst.HOST
     elif server == 'and':
         self.host = gconst.WELL
     else:
         print >> sys.stderr, 'Error: Invalid host URL'
         sys.exit(1)
     # Get the authentication token
     self.TOKEN = HTTP.get_token(self.host, gconst.USERNAME, gconst.PASSWORD)
     # use one dictionary to construct all the test cases arguments
     # use another dictionary to indicate whether it is valid or error
     # both dictionary are one to one corresponding
     # TODO: add 'a'*(TOKEN_LIMIT+INCR) and 'a'*(CLIENT_LIMIT+INCR) later when you have reasonable boundary
     self.arg = {'auth_token': [self.TOKEN, gconst.MISS, '', gconst.RAND_STR, 'a'*TOKEN_LIMIT, 'auth_token1'],\
                 'client': ['curl', '', 'a'*CLIENT_LIMIT, 'a'*(CLIENT_LIMIT+1), gconst.MISS, 'client1']}
     self.arg_msg = {'auth_token': ['v', gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL],\
                     'client': ['v', 'v', 'v', gconst.CLT_TOO_LONG, gconst.AUTH_FAIL, gconst.AUTH_FAIL]}
     self.http = HTTP.http_res()
     self.http.set_url(self.host+gconst.USER_INFO_READ)
     self.arg_pass_in = {}
     self.arg_pass_in_msg = []
     self.total_case = 0             # keep track of the total number of test cases
     self.unexpect_case = 0          # keep track of the total number of unexpected cases
     self.invalid_case_id_list = []  # keep track of the invalid case ID             
     self.succ_report = []           # keep track of the passed cases
     self.err_report = []            # keep track of the unexpected cases
 def __init__(self, server):
     if server == 'mob':
         # Mobilizing server
         self.host = gconst.HOST
     elif server == 'and':
         # Andwellness server
         self.host = gconst.WELL
     else:
         print >> sys.stderr, 'Error: Invalid host URL'
         sys.exit(1)
     # use one dictionary to construct all the test cases arguments
     # use another dictionary to indicate whether it is valid or error
     # both dictionary are one to one corresponding
     self.arg = {'user': [gconst.USERNAME, gconst.MISS, '', gconst.RAND_STR, 'a'*USER_LIMIT, 'a'*(USER_LIMIT+1), 'user1'],\
                 'password': [gconst.PASSWORD, gconst.MISS, '', gconst.RAND_STR, 'a'*PASSWORD_LIMIT, 'a'*(PASSWORD_LIMIT+1), 'password1'],\
                 'client': ['curl', '', 'a'*CLIENT_LIMIT, gconst.MISS, 'client1']}
     # TODO: Include 'a'*(CLIENT_LIMIT+1) when decide reasonable limit
     self.arg_msg = {'user': ['v', gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL],\
                     'password': ['v', gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL],\
                     'client': ['v', 'v', 'v', gconst.AUTH_FAIL, gconst.AUTH_FAIL]}
     self.http = HTTP.http_res()
     self.http.set_url(self.host+gconst.AUTH_TOKEN)
     self.arg_pass_in = {}
     self.arg_pass_in_msg = []
     self.total_case = 0             # keep track of the total number of test cases
     self.unexpect_case = 0          # keep track of the total number of unexpected cases
     self.invalid_case_id_list = []  # keep track of the invalid case ID             
     self.succ_report = []           # keep track of the passed cases
     self.err_report = []            # keep track of the unexpected cases
 def __init__(self, server):
     if server == 'mob':
         # moblizing server
         self.host = gconst.HOST
     elif server == 'and':
         # andwellness server
         self.host = gconst.WELL
     else:
         print >> sys.stderr, 'Error: Invalid host URL'
         sys.exit(1)
     # Get the authentication token
     self.TOKEN = HTTP.get_token(self.host, gconst.USERNAME, gconst.PASSWORD)
     # Four dictionaries, two for valid cases, two for invalid cases.
     # The two with actual value has one-to-one correspondency with
     # the other two dicts which contains tags to indicate the expected result
     self.valid_arg = {'auth_token': [self.TOKEN],\
                       'client': ['curl', '', 'a'*CLIENT_LIMIT],\
                       'running_state': ['running', 'stopped'],\
                       'privacy_state': ['private', 'shared'],\
                       'class_urn_list': [gconst.CLS_URN, gconst.CLS_URN_LIST_COMMA],\
                       'xml': [(pycurl.FORM_FILE, XML_FILE)],\
                       'description': ['', gconst.MISS, 'a'*DES_LIMIT]}
     self.valid_arg_msg = {'auth_token': ['v'],\
                           'client': ['v', 'v', 'v'],\
                           'running_state': ['v', 'v'],\
                           'privacy_state': ['v', 'v'],\
                           'class_urn_list': ['v', 'v'],\
                           'xml': ['v'],\
                           'description': ['v', 'v', 'v']}
     # in order to reduce the test cases, I combine the '' with gconst.MISS, since server treat them equally
     # Add boundary case for 'running_state', 'privacy_state', 
     self.invalid_arg = {'auth_token': [gconst.MISS, gconst.RAND_STR, 'a'*TOKEN_LIMIT, 'auth_token1'],\
                         'client': [gconst.MISS, 'client1', 'a'*(CLIENT_LIMIT+1)],\
                         'running_state': ['', gconst.RAND_STR, gconst.MISS, 'a'*RUN_STATE_LIMIT, 'running_state1'],\
                         'privacy_state': ['', gconst.RAND_STR, gconst.MISS, 'a'*PRI_STATE_LIMIT, 'privacy_state1'],\
                         'class_urn_list': [gconst.RAND_STR, gconst.MISS, gconst.CLS_UNKNOWN, 'a'*CLS_LIMIT, 'class_urn_list1'],\
                         'xml': [(pycurl.FORM_FILE, XML_PDF), (pycurl.FORM_FILE, XML_DOC), (pycurl.FORM_FILE, XML_EXE)],\
                         'description':['a'*(DES_LIMIT+INCR)]}
     self.invalid_arg_msg = {'auth_token': [gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL],\
                             'client': [gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.CLT_TOO_LONG],\
                             'running_state': [gconst.INVALID_RUN_STATE, gconst.INVALID_RUN_STATE,\
                                               gconst.INVALID_RUN_STATE, gconst.INVALID_RUN_STATE, gconst.INVALID_RUN_STATE],\
                             'privacy_state': [gconst.INVALID_PRI_STATE, gconst.INVALID_PRI_STATE,\
                                               gconst.INVALID_PRI_STATE, gconst.INVALID_PRI_STATE, gconst.INVALID_PRI_STATE],\
                             'class_urn_list': [gconst.INVALID_CLS_URN, gconst.INVALID_CLS_URN, \
                                                gconst.INVALID_CLS_URN, gconst.INVALID_CLS_URN, gconst.INVALID_CLS_URN],\
                             'xml': [gconst.INVALID_XML, gconst.INVALID_XML, gconst.INVALID_XML],\
                             'description': ['v']}
     self.para_name_list = ['auth_token', 'client', 'running_state', 'privacy_state', 'class_urn_list', 'xml', 'description']
     self.http = HTTP.http_res()
     self.http.set_url(self.host+gconst.CAMP_CRET)
     self.arg_pass_in = {}
     self.arg_pass_in_msg = []
     self.total_case = 0             # keep track of the total number of test cases
     self.unexpect_case = 0          # keep track of the total number of unexpected cases
     self.invalid_case_id_list = []  # keep track of the invalid case ID             
     self.succ_report = []           # keep track of the passed cases
     self.err_report = []            # keep track of the unexpected cases
 def __init__(self, server):
     if server == 'mob':
         self.host = gconst.HOST
     elif server == 'and':
         self.host = gconst.WELL
     else:
         print >> sys.stderr, 'Error: Invalid host URL'
         sys.exit(1)
     # Get the authentication token
     self.TOKEN = HTTP.get_token(self.host, gconst.USERNAME, gconst.PASSWORD)
     # use one dictionary to construct all the valid/invalid test cases arguments
     # use another dictionary to indicate whether it is valid or error
     # both dictionary are one to one corresponding
     self.valid_arg = {'auth_token': [self.TOKEN],\
                       'client': ['curl', '', 'a'*CLIENT_LIMIT],\
                       'campaign_urn_list': ['', gconst.MISS, gconst.CAMP_URN, gconst.CAMP_URN_LIST_COMMA, 'campaign_urn_list1'],\
                       'class_urn_list': ['', gconst.MISS, gconst.CLS_URN, gconst.CLS_URN_LIST_COMMA, 'class_urn_list1']}
     self.valid_arg_msg = {'auth_token': ['v'],\
                           'client': ['v', 'v', 'v'],\
                           'campaign_urn_list': ['v', 'v', 'v', 'v', 'v'],\
                           'class_urn_list': ['v', 'v', 'v', 'v', 'v']}
     # TODO: add 'a'*(CLIENT_LIMIT+INCR), 'a'*(CAMP_LIMIT+INCR), 'a'*(CLS_LIMIT+INCR) when you have reasonable limit
     self.invalid_arg = {'auth_token': [gconst.MISS, '', gconst.RAND_STR, 'a'*TOKEN_LIMIT, 'auth_token1'],\
                         'client': [gconst.MISS, 'client1', 'a'*(CLIENT_LIMIT+1)],\
                         'campaign_urn_list': [gconst.RAND_STR, 'a'*CAMP_LIMIT],\
                         'class_urn_list': [gconst.RAND_STR, 'a'*CLS_LIMIT]}
     # TODO: add gconst.AUTH_FAIL for 'client', 'campaign_urn_list' and 'class_urn_list' when you have reasonable limit
     self.invalid_arg_msg = {'auth_token': [gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL],\
                             'client': [gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.CLT_TOO_LONG],\
                             'campaign_urn_list': [gconst.INVALID_CAMP_URN, gconst.INVALID_CAMP_URN],\
                             'class_urn_list': [gconst.INVALID_CLS_URN, gconst.INVALID_CLS_URN]}
     self.para_name_list = ['auth_token', 'client', 'campaign_urn_list', 'class_urn_list']
     self.http = HTTP.http_res()
     self.http.set_url(self.host+gconst.USER_READ)
     self.arg_pass_in = {}
     self.arg_pass_in_msg = []
     self.total_case = 0             # keep track of the total number of test cases
     self.unexpect_case = 0          # keep track of the total number of unexpected cases
     self.invalid_case_id_list = []  # keep track of the invalid case ID             
     self.succ_report = []           # keep track of the passed cases
     self.err_report = []            # keep track of the unexpected cases
 def __init__(self, server):
     if server == 'mob':
         # moblizing server
         self.host = gconst.HOST
     elif server == 'and':
         # andwellness server
         self.host = gconst.WELL
     else:
         print >> sys.stderr, 'Error: Invalid host URL'
         sys.exit(1)
     # Get the authentication token
     self.TOKEN = HTTP.get_token(self.host, gconst.USERNAME, gconst.PASSWORD)
     # Four dictionaries, two for valid cases, two for invalid cases.
     # The two with actual value has one-to-one correspondency with
     # the other two dicts which contains tags to indicate the expected result
     self.valid_arg = {'auth_token': [self.TOKEN],\
                       'client': ['curl', '', 'a'*CLIENT_LIMIT],\
                       'campaign_urn': [gconst.CAMP_URN, gconst.CAMP_URN_CAP]}
     self.valid_arg_msg = {'auth_token': ['v'],\
                           'client': ['v', 'v', 'v'],\
                           'campaign_urn': ['v', 'v']}
     # TODO: currently gconst.UNKNOWN and gconst.CAMP_URN_LIST_COMMA has higher priority than gconst.AUTH_FAIL
     # should fix it later on server
     self.invalid_arg = {'auth_token': [gconst.MISS, gconst.RAND_STR, 'a'*TOKEN_LIMIT, 'auth_token1'],\
                         'client': [gconst.MISS, 'client1', 'a'*(CLIENT_LIMIT+1)],\
                         'campaign_urn': ['', gconst.MISS, gconst.CAMP_URN_LIST_COMMA, 'a'*CAMP_LIMIT, 'campaign_urn1', gconst.CLS_UNKNOWN]}
     self.invalid_arg_msg = {'auth_token': [gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL],\
                             'client': [gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.CLT_TOO_LONG],\
                             'campaign_urn': [gconst.INVALID_CAMP_URN, gconst.INVALID_CAMP_URN, gconst.INVALID_CAMP_URN,\
                                              gconst.INVALID_CAMP_URN, gconst.INVALID_CAMP_URN, gconst.INVALID_CAMP_URN]}
     self.para_name_list = ['auth_token', 'client', 'campaign_urn']
     self.http = HTTP.http_res()
     self.http.set_url(self.host+gconst.CAMP_DEL)
     self.arg_pass_in = {}
     self.arg_pass_in_msg = []
     self.total_case = 0             # keep track of the total number of test cases
     self.unexpect_case = 0          # keep track of the total number of unexpected cases
     self.invalid_case_id_list = []  # keep track of the invalid case ID             
     self.succ_report = []           # keep track of the passed cases
     self.err_report = []            # keep track of the unexpected cases
 def __init__(self, server):
     if server == "mob":
         # moblizing server
         self.host = gconst.HOST
     elif server == "and":
         # andwellness server
         self.host = gconst.WELL
     else:
         print >> sys.stderr, "Error: Invalid host URL"
         sys.exit(1)
     # Get the authentication token
     self.TOKEN = HTTP.get_token(self.host, gconst.USERNAME, gconst.PASSWORD)
     # Four dictionaries, two for valid cases, two for invalid cases.
     # The two with actual value has one-to-one correspondency with
     # the other two dicts which contains tags to indicate the expected result
     # In order to reduce the test cases, I combine '' with gconst.MISS
     self.valid_arg = {
         "auth_token": [self.TOKEN],
         "client": ["curl", "a" * CLIENT_LIMIT],
         "campaign_urn": [gconst.CAMP_URN],
         "running_state": [gconst.MISS, "running", "stopped"],
         "privacy_state": [gconst.MISS, "private", "shared"],
         "class_urn_list": [gconst.MISS, gconst.CLS_URN, gconst.CLS_URN_LIST_COMMA],
         "xml": [(pycurl.FORM_FILE, XML_FILE)],
         "description": [gconst.MISS, "a" * DES_LIMIT],
         "user_role_list_add": [gconst.MISS, gconst.ROLE_SUP],
         "user_role_list_remove": [gconst.MISS, gconst.ROLE_SUP],
     }
     self.valid_arg_msg = {
         "auth_token": ["v"],
         "client": ["v", "v"],
         "campaign_urn": ["v"],
         "running_state": ["v", "v", "v"],
         "privacy_state": ["v", "v", "v"],
         "class_urn_list": ["v", "v", "v"],
         "xml": ["v"],
         "description": ["v", "v"],
         "user_role_list_add": ["v", "v"],
         "user_role_list_remove": ["v", "v"],
     }
     self.invalid_arg = {
         "auth_token": [gconst.MISS, gconst.RAND_STR, "a" * TOKEN_LIMIT, "auth_token1"],
         "client": [gconst.MISS, "client1", "a" * (CLIENT_LIMIT + 1)],
         "campaign_urn": [
             "",
             gconst.MISS,
             gconst.CAMP_URN_LIST_COMMA,
             "a" * CAMP_LIMIT,
             gconst.CLS_UNKNOWN,
             "campaign_urn1",
             gconst.CAMP_URN_CAP,
         ],
         "running_state": ["a" * RUN_STATE_LIMIT, gconst.RAND_STR],
         "privacy_state": ["a" * PRI_STATE_LIMIT, gconst.RAND_STR],
         "class_urn_list": [gconst.CLS_UNKNOWN, "a" * CLS_LIMIT, gconst.RAND_STR],
         "xml": [(pycurl.FORM_FILE, XML_PDF), (pycurl.FORM_FILE, XML_DOC), (pycurl.FORM_FILE, XML_EXE)],
         "description": ["a" * (DES_LIMIT + INCR)],
         "user_role_list_add": [gconst.RAND_STR, gconst.NONEXIST_USER, gconst.USER_INVALID, gconst.ROLE_INVALID],
         "user_role_list_remove": [gconst.RAND_STR, gconst.NONEXIST_USER, gconst.USER_INVALID, gconst.ROLE_INVALID],
     }
     self.invalid_arg_msg = {
         "auth_token": [gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.AUTH_FAIL],
         "client": [gconst.AUTH_FAIL, gconst.AUTH_FAIL, gconst.CLT_TOO_LONG],
         "campaign_urn": [
             gconst.INVALID_CAMP_URN,
             gconst.INVALID_CAMP_URN,
             gconst.INVALID_CAMP_URN,
             gconst.INVALID_CAMP_URN,
             gconst.INVALID_CAMP_URN,
             gconst.INVALID_CAMP_URN,
             gconst.CHANGE_CAMP_ID,
         ],
         "running_state": [gconst.INVALID_RUN_STATE, gconst.INVALID_RUN_STATE],
         "privacy_state": [gconst.INVALID_PRI_STATE, gconst.INVALID_PRI_STATE],
         "class_urn_list": [gconst.INVALID_CLS_URN, gconst.INVALID_CLS_URN, gconst.INVALID_CLS_URN],
         "xml": [gconst.INVALID_XML, gconst.INVALID_XML, gconst.INVALID_XML],
         "description": ["v"],
         "user_role_list_add": [
             gconst.INVALID_ROLE,
             gconst.INVALID_USERNAME,
             gconst.INVALID_USERNAME,
             gconst.INVALID_ROLE,
         ],
         "user_role_list_remove": [
             gconst.INVALID_ROLE,
             gconst.INVALID_USERNAME,
             gconst.INVALID_USERNAME,
             gconst.INVALID_ROLE,
         ],
     }
     self.para_name_list = [
         "auth_token",
         "client",
         "campaign_urn",
         "running_state",
         "privacy_state",
         "class_urn_list",
         "xml",
         "description",
         "user_role_list_add",
         "user_role_list_remove",
     ]
     self.http = HTTP.http_res()
     self.http.set_url(self.host + gconst.CAMP_UP)
     self.arg_pass_in = {}
     self.arg_pass_in_msg = []
     self.total_case = 0  # keep track of the total number of test cases
     self.unexpect_case = 0  # keep track of the total number of unexpected cases
     self.invalid_case_id_list = []  # keep track of the invalid case ID
     self.succ_report = []  # keep track of the passed cases
     self.err_report = []  # keep track of the unexpected cases
 def __init__(self, server):
     if server == 'mob':
         self.host = gconst.HOST
     elif server == 'and':
         self.host = gconst.WELL
     else:
         print >> sys.stderr, 'Error: Invalid host URL'
         sys.exit(1)
     # Get the authentication token
     self.TOKEN = HTTP.get_token(self.host, gconst.USERNAME, gconst.PASSWORD)
     # use dictionary to construct all expectation result
     # Notice that the expected string is only a substring of expected response
     # TODO: finish construct the expected result
     self.exp_result = {1:"The content of element 'campaign' is not complete. One of '{campaignUrn}' is expected",\
                        2:"XML document structures must start and end within the same entity",\
                        3:"The content of elements must consist of well-formed character data or markup",\
                        4:"The content of element 'campaign' is not complete. One of '{campaignName}' is expected",\
                        5:"The content of element 'campaign' is not complete. One of '{serverUrl, surveys}' is expected",\
                        6:"The content of element 'campaign' is not complete. One of '{surveys}' is expected",\
                        7:"The content of element 'surveys' is not complete. One of '{survey}' is expected",\
                        8:"The content of element 'survey' is not complete. One of '{id, title, description, introText, submitText, showSummary, editSummary, summaryText, anytime, contentList}' is expected",\
                        9:"The content of element 'survey' is not complete. One of '{id}' is expected",\
                        10:"The content of element 'survey' is not complete. One of '{title}' is expected",\
                        11:"The content of element 'survey' is not complete. One of '{description, introText, submitText}' is expected",\
                        12:"The content of element 'survey' is not complete. One of '{description, introText, showSummary}' is expected",\
                        13:"Invalid survey config for survey id a. editSummary is required if showSummary is true",\
                        14:"Invalid survey config for survey id a. summaryText is required if showSummary is true",\
                        15:"The content of element 'survey' is not complete. One of '{description, introText, anytime}' is expected",\
                        16:"Invalid content was found starting with element 'prompt'. One of '{description, introText, contentList}' is expected.",\
                        17:"success",\
                        18:"success",\
                        19:"success",\
                        20:"success",\
                        21:"success",\
                        22:"success",\
                        23:"success",\
                        24:"The content of element 'prompt' is not complete. One of '{displayType, explanationText, default, condition, skipLabel}' is expected",\
                        25:"The content of element 'prompt' is not complete. One of '{displayLabel, explanationText, default, condition, skipLabel}' is expected",\
                        26:"The content of element 'prompt' is not complete. One of '{id, explanationText, default, condition, skipLabel}' is expected",\
                        27:"The content of element 'prompt' is not complete. One of '{promptText, explanationText, default, condition, skipLabel}' is expected",\
                        28:"Invalid prompt config for prompt id d. abbreviatedText is required if showSummary on the parent survey is true",\
                        29:"The content of element 'prompt' is not complete. One of '{explanationText, promptType, default, condition, skipLabel}' is expected",\
                        30:"invalid prompt configuration",\
                        31:"Invalid content was found starting with element 'key'. One of '{property}' is expected",\
                        32:"Invalid content was found starting with element 'label'. One of '{key}' is expected",\
                        33:"The content of element 'property' is not complete. One of '{label}' is expected",\
                        34:"The content of element 'prompt' is not complete. One of '{explanationText, default, condition, skippable, skipLabel}' is expected",\
                        35:"Invalid prompt config for prompt id d. skipLabel is required if skippable is true",\
                        36:"Invalid content was found starting with element 'messageText'. One of '{prompt, message}' is expected",\
                        37:"The content of element 'message' is not complete. One of '{condition, messageText}' is expected",\
                        38:MAXLESSMIN,\
                        39:INTEGER,\
                        40:INTEGER+'2147483648',\
                        41:"success",\
                        42:MAXLESSMIN,\
                        43:INTEGER,\
                        44:INTEGER+'2147483648',\
                        45:NONNEGATIVE+'-10',\
                        46:"max cannot be greater than min",\
                        47:INTEGER,\
                        48:INTEGER+'2147483648',\
                        49:POSITIVE+'-100',\
                        50:INTEGER+'min',\
                        51:INTEGER+'2147483648',\
                        52:NONNEGATIVE+'-100',\
                        53:OVERFLOW,\
                        54:OVERFLOW,\
                        55:DUPLICATE+'choice key: 0',\
                        56:DUPLICATE+'label: 10',\
                        57:INTEGER+'min',\
                        58:INTEGER+'2147483648',\
                        59:NONNEGATIVE+'-10000',\
                        60:"",\
                        61:OVERFLOW,\
                        62:DUPLICATE+'choice key: 0',\
                        63:DUPLICATE+'label: 10',\
                        64:INTEGER+'min',\
                        65:INTEGER+'2147483648',\
                        66:NONNEGATIVE+'-100',\
                        67:OVERFLOW,\
                        68:OVERFLOW,\
                        69:"duplicate choice key found: 0",\
                        70:"duplicate choice label found: 10",\
                        71:INTEGER+'min',\
                        72:INTEGER+'2147483648',\
                        73:NONNEGATIVE+'-10000',\
                        74:OVERFLOW,\
                        75:OVERFLOW,\
                        76:"duplicate choice key found: 0",\
                        77:"duplicate choice label found: 10",\
                        78:"At least 2 'property' nodes are required for prompt",\
                        79:"At least 2 'property' nodes are required for prompt",\
                        80:"success",\
                        81:"success",\
                        82:"invalid prompt configuration",\
                        83:"missing 'res' property for XML fragment",\
                        84:OVERFLOW,\
                        85:"Invalid content was found starting with element 'label'. One of '{key}' is expected",\
                        86:INTEGER+'a',\
                        87:POSITIVE+'-100',\
                        88:OVERFLOW,\
                        89:OVERFLOW,\
                        90:"Invalid content was found starting with element 'label'. One of '{key}' is expected",\
                        91:OVERFLOW,\
                        92:OVERFLOW,\
                        93:"All Android package names must contain at least one '.' in",\
                        94:MEANINGLESS_DOT,\
                        95:OVERFLOW,\
                        96:"Invalid content was found starting with element 'label'. One of '{key}' is expected",\
                        97:OVERFLOW,\
                        98:OVERFLOW,\
                        99:"All Android Activitys must contain at least one '.' in",\
                        100:MEANINGLESS_DOT,\
                        101:OVERFLOW,\
                        102:"Invalid content was found starting with element 'label'. One of '{key}' is expected",\
                        103:OVERFLOW,\
                        104:OVERFLOW,\
                        105:"'min_runs' must be non-negative",\
                        106:"'min_runs' is not a valid integer",\
                        107:OVERFLOW,\
                        108:"Invalid content was found starting with element 'label'. One of '{key}' is expected",\
                        109:OVERFLOW,\
                        110:OVERFLOW,\
                        111:OVERFLOW,\
                        112:"Invalid content was found starting with element 'label'. One of '{key}' is expected",\
                        113:OVERFLOW,\
                        114:OVERFLOW,\
                        115:"'autolaunch' must be either 'true' or 'false'",\
                        116:OVERFLOW,\
                        117:"Invalid content was found starting with element 'label'. One of '{key}' is expected",\
                        118:OVERFLOW,\
                        119:OVERFLOW,\
                        120:"'retries' must be non-negative",\
                        121:"'retries' is not a valid integer",\
                        122:OVERFLOW,\
                        123:"Invalid key in properties list: output in",\
                        124:OVERFLOW,\
                        125:OVERFLOW,\
                        126:OVERFLOW,\
                        127:"success",\
                        128:OVERFLOW,\
                        129:OVERFLOW,\
                        130:"campaign already exists",\
                        131:OVERFLOW,\
                        132:"campaignUrn is not a valid URN: urn:a",\
                        133:OVERFLOW,\
                        134:OVERFLOW,\
                        135:"Invalid server URL",\
                        136:OVERFLOW,\
                        137:OVERFLOW,\
                        138:"Invalid configuration: a duplicate id was found: c",\
                        139:OVERFLOW,\
                        140:OVERFLOW,\
                        141:OVERFLOW,\
                        142:OVERFLOW,\
                        143:OVERFLOW,\
                        144:OVERFLOW,\
                        145:OVERFLOW,\
                        146:OVERFLOW,\
                        147:OVERFLOW,\
                        148:BOOLEAN,\
                        149:BOOLEAN,\
                        150:BOOLEAN,\
                        151:BOOLEAN,\
                        152:BOOLEAN,\
                        153:BOOLEAN,\
                        154:OVERFLOW,\
                        155:OVERFLOW,\
                        156:BOOLEAN,\
                        157:BOOLEAN,\
                        158:BOOLEAN,\
                        159:"The content of element 'contentList' is not complete. One of '{prompt, message}' is expected",\
                        160:"Element 'contentList' cannot have character [children], because the type's content type is element-only",\
                        161:"Element 'contentList' cannot have character [children], because the type's content type is element-only",\
                        162:"success",\
                        163:"success",\
                        164:"success",\
                        165:"success",\
                        166:"success",\
                        167:"success",\
                        168:"success",\
                        169:"success",\
                        170:"success",\
                        171:"success",\
                        172:"success",\
                        173:"success",\
                        174:"success",\
                        175:"success",\
                        176:"success",\
                        177:"success",\
                        178:"success",\
                        179:"success",\
                        180:"success",\
                        181:"success",\
                        182:"success",\
                        183:"success",\
                        184:"success",\
                        185:OVERFLOW,\
                        186:"invalid display type: count count",\
                        187:OVERFLOW,\
                        188:OVERFLOW,\
                        189:OVERFLOW,\
                        190:OVERFLOW,\
                        191:OVERFLOW,\
                        192:OVERFLOW,\
                        193:"Invalid configuration: a duplicate id was found: d",\
                        194:"success",\
                        195:OVERFLOW,\
                        196:OVERFLOW,\
                        197:OVERFLOW,\
                        198:OVERFLOW,\
                        199:OVERFLOW,\
                        200:OVERFLOW,\
                        201:OVERFLOW,\
                        202:OVERFLOW,\
                        203:"Invalid configuration: an unknown prompt type was found: !@#$%^()_+",\
                        204:OVERFLOW,\
                        205:"The content of element 'properties' is not complete. One of '{property}' is expected",\
                        206:"Element 'properties' cannot have character [children], because the type's content type is element-only",\
                        207:"Element 'properties' cannot have character [children], because the type's content type is element-only",\
                        208:OVERFLOW,\
                        209:"Value is not an integer: !@#$%^*()_+",\
                        210:"Value is out of min-max range: 20",\
                        211:"default values for text prompts are disallowed",\
                        212:"default value [aaa] is missing from choices",\
                        213:"default value [aaa] is missing from choices",\
                        214:"default value [aaa] is missing from choices",\
                        215:"default value [aaa] is missing from choices",\
                        216:"Value is not an integer: !@#$%^*()_+",\
                        217:"Value is out of min-max range: -1",\
                        218:"default values are disallowed for photo prompts",\
                        219:"default values are disallowed for remote Activity prompt types",\
                        220:OVERFLOW,\
                        221:"a condition is not allowed on the first prompt of a survey. invalid prompt id: r",\
                        222:"invalid condition in multi or single choice prompt: <=",\
                        223:BAD_COND_FORM+".==0",\
                        224:BAD_COND_FORM+"r>=...",\
                        225:INVALID_COND+"r>=====0",\
                        226:INVALID_COND+"r>=0 not r == 1",\
                        227:OVERFLOW,\
                        228:BOOLEAN,\
                        229:BOOLEAN,\
                        230:BOOLEAN,\
                        231:OVERFLOW,\
                        232:OVERFLOW,\
                        233:OVERFLOW,\
                        234:OVERFLOW,\
                        235:"a condition is not allowed on the first prompt of a survey. invalid prompt id: drink",\
                        236:"invalid condition in multi or single choice prompt: <=",\
                        237:INVALID_COND,\
                        238:INVALID_COND,\
                        239:INVALID_COND,\
                        240:INVALID_COND,\
                        241:OVERFLOW}
     self.http = HTTP.http_res()
     self.http.set_url(self.host+gconst.CAMP_CRET)
     # xml argument will be add and update in the blackbox_test function
     self.arg_pass_in = {'auth_token':self.TOKEN,\
                         'client': 'curl',\
                         'running_state': 'running',\
                         'privacy_state': 'shared',\
                         'class_urn_list': gconst.CLS_URN_LIST}
     self.total_case = 0             # keep track of the total number of test cases
     self.unexpect_case = 0          # keep track of the total number of unexpected cases
     self.invalid_case_id_list = []  # keep track of the invalid case ID             
     self.succ_report = []           # keep track of the passed cases
     self.err_report = []            # keep track of the unexpected cases