|
| 1 | +import os |
| 2 | +import responses |
| 3 | +import watson_developer_cloud |
| 4 | + |
| 5 | +CLUSTER_ID = 'sc0747112c_f978_4e1f_b97e_0e3a8101ac5b' |
| 6 | +URL_CLUSTERS = 'https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters' |
| 7 | +URL_CLUSTER = URL_CLUSTERS + '/' + CLUSTER_ID |
| 8 | + |
| 9 | +RANKER_ID = '3b140ax14-rank-10383' |
| 10 | +URL_RANKERS = 'https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/rankers' |
| 11 | +URL_RANKER = URL_RANKERS + '/' + RANKER_ID |
| 12 | + |
| 13 | +retrieve_and_rank = watson_developer_cloud.RetrieveAndRankV1(username="username", |
| 14 | + password="password") |
| 15 | + |
| 16 | +@responses.activate |
| 17 | +def test_list_rankers(): |
| 18 | + |
| 19 | + listrank_response = '{"rankers":[{"ranker_id":"3b140ax14-rank-10383","name":"pythonRank"}]}' |
| 20 | + |
| 21 | + responses.add(responses.GET, URL_RANKERS, |
| 22 | + match_querystring=True, |
| 23 | + body=listrank_response, status=200, |
| 24 | + content_type='application/json') |
| 25 | + |
| 26 | + ranker_list = retrieve_and_rank.list_rankers() |
| 27 | + |
| 28 | + assert ranker_list is not None |
| 29 | + assert len(ranker_list['rankers']) == 1 |
| 30 | + assert responses.calls[0].request.url == URL_RANKERS |
| 31 | + assert responses.calls[0].response.text == listrank_response |
| 32 | + |
| 33 | + |
| 34 | +@responses.activate |
| 35 | +def test_ranker_status(): |
| 36 | + |
| 37 | + statusrank_response = '{"ranker_id":"3b140ax14-rank-10383","name":"pythonRank","status":"Available"}' |
| 38 | + |
| 39 | + responses.add(responses.GET, URL_RANKER, |
| 40 | + match_querystring=True, |
| 41 | + body=statusrank_response, status=200, |
| 42 | + content_type='application/json') |
| 43 | + |
| 44 | + ranker_status = retrieve_and_rank.get_ranker_status(RANKER_ID) |
| 45 | + |
| 46 | + assert ranker_status is not None |
| 47 | + assert ranker_status['status'] is not None |
| 48 | + assert responses.calls[0].request.url == URL_RANKER |
| 49 | + assert responses.calls[0].response.text == statusrank_response |
| 50 | + |
| 51 | + |
| 52 | +@responses.activate |
| 53 | +def test_rank(): |
| 54 | + |
| 55 | + rank_url = URL_RANKER + '/rank' |
| 56 | + rank_response = '{"ranker_id":"3b140ax14-rank-10383",' \ |
| 57 | + '"top_answer":"30965a00-5415-4ef5-8e4a-bb21a7aeab44", "answers":[' \ |
| 58 | + '{"answer_id":"30965a00-5415-4ef5-8e4a-bb21a7aeab44","score":180.0,"confidence":0.2636349925008873},' \ |
| 59 | + '{"answer_id":"30965a00-5415-4ef5-8e4a-bb21a7aeab44","score":178.0,"confidence":0.25972667610243827}]}' |
| 60 | + |
| 61 | + responses.add(responses.POST, rank_url, |
| 62 | + match_querystring=True, |
| 63 | + body=rank_response, status=200, |
| 64 | + content_type='application/json') |
| 65 | + |
| 66 | + ranker_answer = None |
| 67 | + |
| 68 | + with open(os.path.join(os.path.dirname(__file__), '../resources/ranker_answer_data.csv'), 'rb') as answer_data: |
| 69 | + ranker_answer = retrieve_and_rank.rank('3b140ax14-rank-10383', answer_data=answer_data, top_answers=3) |
| 70 | + |
| 71 | + assert ranker_answer is not None |
| 72 | + assert responses.calls[0].request.url == rank_url |
| 73 | + assert responses.calls[0].response.text == rank_response |
| 74 | + |
| 75 | + |
| 76 | +@responses.activate |
| 77 | +def test_create_ranker(): |
| 78 | + |
| 79 | + createrank_response = '{"ranker_id":"3b140ax14-rank-10383","name":"pythonRank","status":"Training"}' |
| 80 | + |
| 81 | + responses.add(responses.POST, URL_RANKERS, |
| 82 | + match_querystring=True, |
| 83 | + body=createrank_response, status=200, |
| 84 | + content_type='application/json') |
| 85 | + |
| 86 | + ranker = None |
| 87 | + with open(os.path.join(os.path.dirname(__file__), '../resources/ranker_training_data.csv'), 'rb') as training_data: |
| 88 | + ranker = retrieve_and_rank.create_ranker(training_data=training_data, name='pythonRank') |
| 89 | + |
| 90 | + assert ranker is not None |
| 91 | + assert ranker['ranker_id'] == RANKER_ID |
| 92 | + assert ranker['name'] == 'pythonRank' |
| 93 | + assert responses.calls[0].request.url == URL_RANKERS |
| 94 | + assert responses.calls[0].response.text == createrank_response |
| 95 | + |
| 96 | + |
| 97 | +@responses.activate |
| 98 | +def test_delete_ranker(): |
| 99 | + removerank_response = '{}' |
| 100 | + |
| 101 | + responses.add(responses.DELETE, URL_RANKER, |
| 102 | + match_querystring=True, |
| 103 | + body=removerank_response, status=200, |
| 104 | + content_type='application/json') |
| 105 | + |
| 106 | + retrieve_and_rank.delete_ranker(RANKER_ID) |
| 107 | + |
| 108 | + assert responses.calls[0].request.url == URL_RANKER |
| 109 | + assert responses.calls[0].response.text == removerank_response |
| 110 | + |
| 111 | +@responses.activate |
| 112 | +def test_list_cluster(): |
| 113 | + listcluster_response = '{"clusters":[{"solr_cluster_id":"sc0747112c_f978_4e1f_b97e_0e3a8101ac5b","cluster_name":"","cluster_size":"","solr_cluster_status":"READY"}]}' |
| 114 | + |
| 115 | + responses.add(responses.GET, URL_CLUSTERS, |
| 116 | + match_querystring=True, |
| 117 | + body=listcluster_response, status=200, |
| 118 | + content_type='application/json') |
| 119 | + |
| 120 | + clusters = retrieve_and_rank.list_solr_clusters() |
| 121 | + |
| 122 | + assert clusters is not None |
| 123 | + assert responses.calls[0].request.url == URL_CLUSTERS |
| 124 | + assert responses.calls[0].response.text == listcluster_response |
| 125 | + |
| 126 | +@responses.activate |
| 127 | +def test_create_cluster(): |
| 128 | + createcluster_response = '{"solr_cluster_id":"sc0747112c_f978_4e1f_b97e_0e3a8101ac5b","cluster_name":"","cluster_size":"","solr_cluster_status":"NOT_AVAILABLE"}' |
| 129 | + |
| 130 | + responses.add(responses.POST, URL_CLUSTERS, |
| 131 | + match_querystring=True, |
| 132 | + body=createcluster_response, status=200, |
| 133 | + content_type='application/json') |
| 134 | + |
| 135 | + retrieve_and_rank.create_solr_cluster(cluster_name='pythonCluster', cluster_size=None) |
| 136 | + |
| 137 | + assert responses.calls[0].request.url == URL_CLUSTERS |
| 138 | + assert responses.calls[0].response.text == createcluster_response |
| 139 | + |
| 140 | +@responses.activate |
| 141 | +def test_delete_cluster(): |
| 142 | + removecluster_response = '{"message":"WRRCSR023: Successfully deleted Solr cluster [sc0747112c_f978_4e1f_b97e_0e3a8101ac5b].","statusCode":200}' |
| 143 | + |
| 144 | + responses.add(responses.DELETE, URL_CLUSTER, |
| 145 | + body=removecluster_response, status=200, |
| 146 | + match_querystring=True, |
| 147 | + content_type='application/json') |
| 148 | + |
| 149 | + retrieve_and_rank.delete_solr_cluster(CLUSTER_ID) |
| 150 | + |
| 151 | + assert responses.calls[0].request.url == URL_CLUSTER |
| 152 | + assert responses.calls[0].response.text == removecluster_response |
| 153 | + |
| 154 | +@responses.activate |
| 155 | +def test_cluster_status(): |
| 156 | + statuscluster_response = '{"solr_cluster_id":"sc0747112c_f978_4e1f_b97e_0e3a8101ac5b","cluster_name":"","cluster_size":"","solr_cluster_status":"READY"}' |
| 157 | + |
| 158 | + responses.add(responses.GET, URL_CLUSTER, |
| 159 | + body=statuscluster_response, status=200, |
| 160 | + match_querystring=True, |
| 161 | + content_type='application/json') |
| 162 | + |
| 163 | + cluster_status = retrieve_and_rank.get_solr_cluster_status(CLUSTER_ID) |
| 164 | + |
| 165 | + assert cluster_status is not None |
| 166 | + assert responses.calls[0].request.url == URL_CLUSTER |
| 167 | + assert responses.calls[0].response.text == statuscluster_response |
| 168 | + |
| 169 | +@responses.activate |
| 170 | +def test_list_config(): |
| 171 | + listconfigs_url = URL_CLUSTER + '/config' |
| 172 | + listconfigs_response = '{"solr_configs":[]}' |
| 173 | + |
| 174 | + responses.add(responses.GET, listconfigs_url, |
| 175 | + body=listconfigs_response, status=200, |
| 176 | + match_querystring=True, |
| 177 | + content_type='application/json') |
| 178 | + |
| 179 | + config_list = retrieve_and_rank.list_configs(CLUSTER_ID) |
| 180 | + |
| 181 | + assert config_list is not None |
| 182 | + assert responses.calls[0].request.url == listconfigs_url |
| 183 | + assert responses.calls[0].response.text == listconfigs_response |
| 184 | + |
| 185 | +@responses.activate |
| 186 | +def test_create_config(): |
| 187 | + createconfig_url = URL_CLUSTER + '/config/exampleconfig' |
| 188 | + createconfig_response = '{"message":"WRRCSR026: Successfully uploaded named config [example-config] for Solr cluster [sc0747112c_f978_4e1f_b97e_0e3a8101ac5b].","statusCode":200}' |
| 189 | + |
| 190 | + responses.add(responses.POST, createconfig_url, |
| 191 | + body=createconfig_response, status=200, |
| 192 | + match_querystring=True, |
| 193 | + content_type='application/json') |
| 194 | + |
| 195 | + with open(os.path.join(os.path.dirname(__file__), '../resources/solr_config.zip'), 'rb') as config_data: |
| 196 | + config = retrieve_and_rank.create_config(CLUSTER_ID, 'exampleconfig', config=config_data) |
| 197 | + |
| 198 | + assert config is not None |
| 199 | + assert responses.calls[00].request.url == createconfig_url |
| 200 | + assert responses.calls[00].response.text == createconfig_response |
| 201 | + |
| 202 | +@responses.activate |
| 203 | +def test_delete_config(): |
| 204 | + removeconfig_url = URL_CLUSTER + '/config/exampleconfig' |
| 205 | + removeconfig_response = '{"message":"WRRCSR025: Successfully deleted named config [example-config] for Solr cluster [sc0747112c_f978_4e1f_b97e_0e3a8101ac5b]].","statusCode":200}' |
| 206 | + |
| 207 | + responses.add(responses.DELETE, removeconfig_url, |
| 208 | + body=removeconfig_response, status=200, |
| 209 | + match_querystring=True, |
| 210 | + content_type='application/json') |
| 211 | + |
| 212 | + response = retrieve_and_rank.delete_config(CLUSTER_ID, 'exampleconfig') |
| 213 | + |
| 214 | + assert response is not None |
| 215 | + assert responses.calls[0].request.url == removeconfig_url |
| 216 | + assert responses.calls[0].response.text == removeconfig_response |
| 217 | + |
| 218 | +@responses.activate |
| 219 | +def test_get_config(): |
| 220 | + getconfig_url = URL_CLUSTER + '/config/exampleconfig' |
| 221 | + getconfig_response = '{}' |
| 222 | + |
| 223 | + responses.add(responses.GET, getconfig_url, |
| 224 | + match_querystring=True, |
| 225 | + body=getconfig_response, status=200) |
| 226 | + |
| 227 | + retrieve_and_rank.get_config(CLUSTER_ID, 'exampleconfig') |
| 228 | + |
| 229 | + assert responses.calls[0].request.url == getconfig_url |
| 230 | + assert responses.calls[0].response.text == getconfig_response |
| 231 | + |
| 232 | +@responses.activate |
| 233 | +def test_list_collections(): |
| 234 | + listcollection_url = URL_CLUSTER + '/solr/admin/collections?action=LIST&wt=json' |
| 235 | + |
| 236 | + listcollection_response = '{"responseHeader":{"status":0,"QTime":0},"collections":["examplecollection"]}' |
| 237 | + |
| 238 | + responses.add(responses.GET, listcollection_url, |
| 239 | + match_querystring=True, |
| 240 | + body=listcollection_response, status=200, |
| 241 | + content_type='application/json') |
| 242 | + |
| 243 | + retrieve_and_rank.list_collections(CLUSTER_ID) |
| 244 | + |
| 245 | + assert responses.calls[0].response.text == listcollection_response |
| 246 | + |
| 247 | +@responses.activate |
| 248 | +def test_create_collection(): |
| 249 | + createcollection_url = URL_CLUSTER + '/solr/admin/collections?action=CREATE&wt=json&collection.configName=exampleconfig&name=examplecollection' |
| 250 | + createcollection_response = '{}' |
| 251 | + |
| 252 | + responses.add(responses.POST, createcollection_url, |
| 253 | + match_querystring=True, |
| 254 | + body=createcollection_response, status=200, |
| 255 | + content_type='application/json') |
| 256 | + |
| 257 | + collection = retrieve_and_rank.create_collection(CLUSTER_ID, 'examplecollection', 'exampleconfig') |
| 258 | + |
| 259 | + assert collection is not None |
| 260 | + assert responses.calls[0].response.text == createcollection_response |
| 261 | + |
| 262 | +@responses.activate |
| 263 | +def test_delete_collection(): |
| 264 | + deletecollection_url = URL_CLUSTER + '/solr/admin/collections?action=DELETE&wt=json&name=examplecollection' |
| 265 | + deletecollection_response = '{}' |
| 266 | + |
| 267 | + responses.add(responses.POST, deletecollection_url, |
| 268 | + body=deletecollection_response, status=200, |
| 269 | + match_querystring=True, |
| 270 | + content_type='application/json') |
| 271 | + |
| 272 | + retrieve_and_rank.delete_collection(CLUSTER_ID, 'examplecollection', None) |
| 273 | + |
| 274 | + assert responses.calls[0].response.text == deletecollection_response |
| 275 | + |
| 276 | +@responses.activate |
| 277 | +def test_get_solr_client(): |
| 278 | + solr_client = retrieve_and_rank.get_pysolr_client(CLUSTER_ID, 'examplecollection') |
| 279 | + assert solr_client is not None |
0 commit comments