Tree @upstream/latest (Download .tar.gz)
- aws
- cluster-test
- config
- etc
- recipes
- uritemplates
- .gitignore
- .travis.yml
- acknowledged_response.go
- backoff.go
- backoff_test.go
- bulk.go
- bulk_delete_request.go
- bulk_delete_request_easyjson.go
- bulk_delete_request_test.go
- bulk_index_request.go
- bulk_index_request_easyjson.go
- bulk_index_request_test.go
- bulk_processor.go
- bulk_processor_test.go
- bulk_request.go
- bulk_test.go
- bulk_update_request.go
- bulk_update_request_easyjson.go
- bulk_update_request_test.go
- canonicalize.go
- canonicalize_test.go
- CHANGELOG-3.0.md
- CHANGELOG-5.0.md
- clear_scroll.go
- clear_scroll_test.go
- client.go
- client_test.go
- cluster_health.go
- cluster_health_test.go
- cluster_state.go
- cluster_state_test.go
- cluster_stats.go
- cluster_stats_test.go
- CODE_OF_CONDUCT.md
- connection.go
- CONTRIBUTING.md
- CONTRIBUTORS
- count.go
- count_test.go
- decoder.go
- decoder_test.go
- delete.go
- delete_by_query.go
- delete_by_query_test.go
- delete_template.go
- delete_template_test.go
- delete_test.go
- doc.go
- errors.go
- errors_test.go
- example_test.go
- exists.go
- exists_test.go
- explain.go
- explain_test.go
- fetch_source_context.go
- fetch_source_context_test.go
- field_caps.go
- field_caps_test.go
- field_stats.go
- field_stats_test.go
- geo_point.go
- geo_point_test.go
- get.go
- get_template.go
- get_template_test.go
- get_test.go
- go.mod
- go.sum
- highlight.go
- highlight_test.go
- index.go
- index_test.go
- indices_analyze.go
- indices_analyze_test.go
- indices_close.go
- indices_close_test.go
- indices_create.go
- indices_create_test.go
- indices_delete.go
- indices_delete_template.go
- indices_delete_test.go
- indices_exists.go
- indices_exists_template.go
- indices_exists_template_test.go
- indices_exists_test.go
- indices_exists_type.go
- indices_exists_type_test.go
- indices_flush.go
- indices_flush_test.go
- indices_forcemerge.go
- indices_forcemerge_test.go
- indices_get.go
- indices_get_aliases.go
- indices_get_aliases_test.go
- indices_get_field_mapping.go
- indices_get_field_mapping_test.go
- indices_get_mapping.go
- indices_get_mapping_test.go
- indices_get_settings.go
- indices_get_settings_test.go
- indices_get_template.go
- indices_get_template_test.go
- indices_get_test.go
- indices_open.go
- indices_open_test.go
- indices_put_alias.go
- indices_put_alias_test.go
- indices_put_mapping.go
- indices_put_mapping_test.go
- indices_put_settings.go
- indices_put_settings_test.go
- indices_put_template.go
- indices_refresh.go
- indices_refresh_test.go
- indices_rollover.go
- indices_rollover_test.go
- indices_segments.go
- indices_segments_test.go
- indices_shrink.go
- indices_shrink_test.go
- indices_stats.go
- indices_stats_test.go
- ingest_delete_pipeline.go
- ingest_delete_pipeline_test.go
- ingest_get_pipeline.go
- ingest_get_pipeline_test.go
- ingest_put_pipeline.go
- ingest_put_pipeline_test.go
- ingest_simulate_pipeline.go
- ingest_simulate_pipeline_test.go
- inner_hit.go
- inner_hit_test.go
- ISSUE_TEMPLATE.md
- LICENSE
- logger.go
- mget.go
- mget_test.go
- msearch.go
- msearch_test.go
- mtermvectors.go
- mtermvectors_test.go
- nodes_info.go
- nodes_info_test.go
- nodes_stats.go
- nodes_stats_test.go
- percolate_test.go
- ping.go
- ping_test.go
- plugins.go
- plugins_test.go
- put_template.go
- put_template_test.go
- query.go
- README.md
- reindex.go
- reindex_test.go
- request.go
- request_test.go
- rescore.go
- rescorer.go
- response.go
- response_test.go
- retrier.go
- retrier_test.go
- retry.go
- retry_test.go
- run-es.sh
- script.go
- script_test.go
- scroll.go
- scroll_test.go
- search.go
- search_aggs.go
- search_aggs_bucket_adjacency_matrix.go
- search_aggs_bucket_adjacency_matrix_test.go
- search_aggs_bucket_children.go
- search_aggs_bucket_children_test.go
- search_aggs_bucket_date_histogram.go
- search_aggs_bucket_date_histogram_test.go
- search_aggs_bucket_date_range.go
- search_aggs_bucket_date_range_test.go
- search_aggs_bucket_diversified_sampler.go
- search_aggs_bucket_diversified_sampler_test.go
- search_aggs_bucket_filter.go
- search_aggs_bucket_filter_test.go
- search_aggs_bucket_filters.go
- search_aggs_bucket_filters_test.go
- search_aggs_bucket_geo_distance.go
- search_aggs_bucket_geo_distance_test.go
- search_aggs_bucket_geohash_grid.go
- search_aggs_bucket_geohash_grid_test.go
- search_aggs_bucket_global.go
- search_aggs_bucket_global_test.go
- search_aggs_bucket_histogram.go
- search_aggs_bucket_histogram_test.go
- search_aggs_bucket_ip_range.go
- search_aggs_bucket_ip_range_test.go
- search_aggs_bucket_missing.go
- search_aggs_bucket_missing_test.go
- search_aggs_bucket_nested.go
- search_aggs_bucket_nested_test.go
- search_aggs_bucket_range.go
- search_aggs_bucket_range_test.go
- search_aggs_bucket_reverse_nested.go
- search_aggs_bucket_reverse_nested_test.go
- search_aggs_bucket_sampler.go
- search_aggs_bucket_sampler_test.go
- search_aggs_bucket_significant_terms.go
- search_aggs_bucket_significant_terms_test.go
- search_aggs_bucket_terms.go
- search_aggs_bucket_terms_test.go
- search_aggs_matrix_stats.go
- search_aggs_matrix_stats_test.go
- search_aggs_metrics_avg.go
- search_aggs_metrics_avg_test.go
- search_aggs_metrics_cardinality.go
- search_aggs_metrics_cardinality_test.go
- search_aggs_metrics_extended_stats.go
- search_aggs_metrics_extended_stats_test.go
- search_aggs_metrics_geo_bounds.go
- search_aggs_metrics_geo_bounds_test.go
- search_aggs_metrics_geo_centroid.go
- search_aggs_metrics_geo_centroid_test.go
- search_aggs_metrics_max.go
- search_aggs_metrics_max_test.go
- search_aggs_metrics_min.go
- search_aggs_metrics_min_test.go
- search_aggs_metrics_percentile_ranks.go
- search_aggs_metrics_percentile_ranks_test.go
- search_aggs_metrics_percentiles.go
- search_aggs_metrics_percentiles_test.go
- search_aggs_metrics_stats.go
- search_aggs_metrics_stats_test.go
- search_aggs_metrics_sum.go
- search_aggs_metrics_sum_test.go
- search_aggs_metrics_top_hits.go
- search_aggs_metrics_top_hits_test.go
- search_aggs_metrics_value_count.go
- search_aggs_metrics_value_count_test.go
- search_aggs_pipeline_avg_bucket.go
- search_aggs_pipeline_avg_bucket_test.go
- search_aggs_pipeline_bucket_script.go
- search_aggs_pipeline_bucket_script_test.go
- search_aggs_pipeline_bucket_selector.go
- search_aggs_pipeline_bucket_selector_test.go
- search_aggs_pipeline_cumulative_sum.go
- search_aggs_pipeline_cumulative_sum_test.go
- search_aggs_pipeline_derivative.go
- search_aggs_pipeline_derivative_test.go
- search_aggs_pipeline_max_bucket.go
- search_aggs_pipeline_max_bucket_test.go
- search_aggs_pipeline_min_bucket.go
- search_aggs_pipeline_min_bucket_test.go
- search_aggs_pipeline_mov_avg.go
- search_aggs_pipeline_mov_avg_test.go
- search_aggs_pipeline_percentiles_bucket.go
- search_aggs_pipeline_percentiles_bucket_test.go
- search_aggs_pipeline_serial_diff.go
- search_aggs_pipeline_serial_diff_test.go
- search_aggs_pipeline_stats_bucket.go
- search_aggs_pipeline_stats_bucket_test.go
- search_aggs_pipeline_sum_bucket.go
- search_aggs_pipeline_sum_bucket_test.go
- search_aggs_pipeline_test.go
- search_aggs_test.go
- search_collapse_builder.go
- search_collapse_builder_test.go
- search_queries_bool.go
- search_queries_bool_test.go
- search_queries_boosting.go
- search_queries_boosting_test.go
- search_queries_common_terms.go
- search_queries_common_terms_test.go
- search_queries_constant_score.go
- search_queries_constant_score_test.go
- search_queries_dis_max.go
- search_queries_dis_max_test.go
- search_queries_exists.go
- search_queries_exists_test.go
- search_queries_fsq.go
- search_queries_fsq_score_funcs.go
- search_queries_fsq_test.go
- search_queries_fuzzy.go
- search_queries_fuzzy_test.go
- search_queries_geo_bounding_box.go
- search_queries_geo_bounding_box_test.go
- search_queries_geo_distance.go
- search_queries_geo_distance_test.go
- search_queries_geo_polygon.go
- search_queries_geo_polygon_test.go
- search_queries_has_child.go
- search_queries_has_child_test.go
- search_queries_has_parent.go
- search_queries_has_parent_test.go
- search_queries_ids.go
- search_queries_ids_test.go
- search_queries_indices.go
- search_queries_indices_test.go
- search_queries_match.go
- search_queries_match_all.go
- search_queries_match_all_test.go
- search_queries_match_none.go
- search_queries_match_none_test.go
- search_queries_match_phrase.go
- search_queries_match_phrase_prefix.go
- search_queries_match_phrase_prefix_test.go
- search_queries_match_phrase_test.go
- search_queries_match_test.go
- search_queries_more_like_this.go
- search_queries_more_like_this_test.go
- search_queries_multi_match.go
- search_queries_multi_match_test.go
- search_queries_nested.go
- search_queries_nested_test.go
- search_queries_parent_id.go
- search_queries_parent_id_test.go
- search_queries_percolator.go
- search_queries_percolator_test.go
- search_queries_prefix.go
- search_queries_prefix_example_test.go
- search_queries_prefix_test.go
- search_queries_query_string.go
- search_queries_query_string_test.go
- search_queries_range.go
- search_queries_range_test.go
- search_queries_raw_string.go
- search_queries_raw_string_test.go
- search_queries_regexp.go
- search_queries_regexp_test.go
- search_queries_script.go
- search_queries_script_test.go
- search_queries_simple_query_string.go
- search_queries_simple_query_string_test.go
- search_queries_slice.go
- search_queries_slice_test.go
- search_queries_term.go
- search_queries_term_test.go
- search_queries_terms.go
- search_queries_terms_test.go
- search_queries_type.go
- search_queries_type_test.go
- search_queries_wildcard.go
- search_queries_wildcard_test.go
- search_request.go
- search_request_test.go
- search_shards.go
- search_shards_test.go
- search_source.go
- search_source_test.go
- search_suggester_test.go
- search_terms_lookup.go
- search_terms_lookup_test.go
- search_test.go
- setup_test.go
- snapshot_create.go
- snapshot_create_repository.go
- snapshot_create_repository_test.go
- snapshot_create_test.go
- snapshot_delete_repository.go
- snapshot_delete_repository_test.go
- snapshot_get_repository.go
- snapshot_get_repository_test.go
- snapshot_verify_repository.go
- snapshot_verify_repository_test.go
- sort.go
- sort_test.go
- suggest.go
- suggest_field.go
- suggest_field_test.go
- suggest_test.go
- suggester.go
- suggester_completion.go
- suggester_completion_fuzzy.go
- suggester_completion_fuzzy_test.go
- suggester_completion_test.go
- suggester_context.go
- suggester_context_category.go
- suggester_context_category_test.go
- suggester_context_geo.go
- suggester_context_geo_test.go
- suggester_context_test.go
- suggester_phrase.go
- suggester_phrase_test.go
- suggester_term.go
- suggester_term_test.go
- tasks_cancel.go
- tasks_cancel_test.go
- tasks_get_task.go
- tasks_get_task_test.go
- tasks_list.go
- tasks_list_test.go
- termvectors.go
- termvectors_test.go
- update.go
- update_by_query.go
- update_by_query_test.go
- update_integration_test.go
- update_test.go
- validate.go
- validate_test.go
errors_test.go @upstream/latest — raw · history · blame
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | package elastic import ( "bufio" "fmt" "net/http" "strings" "testing" ) func TestResponseError(t *testing.T) { raw := "HTTP/1.1 404 Not Found\r\n" + "\r\n" + `{"error":{"root_cause":[{"type":"index_missing_exception","reason":"no such index","index":"elastic-test"}],"type":"index_missing_exception","reason":"no such index","index":"elastic-test"},"status":404}` + "\r\n" r := bufio.NewReader(strings.NewReader(raw)) req, err := http.NewRequest("GET", "/", nil) if err != nil { t.Fatal(err) } resp, err := http.ReadResponse(r, nil) if err != nil { t.Fatal(err) } err = checkResponse(req, resp) if err == nil { t.Fatalf("expected error; got: %v", err) } // Check for correct error message expected := fmt.Sprintf("elastic: Error %d (%s): no such index [type=index_missing_exception]", resp.StatusCode, http.StatusText(resp.StatusCode)) got := err.Error() if got != expected { t.Fatalf("expected %q; got: %q", expected, got) } // Check that error is of type *elastic.Error, which contains additional information e, ok := err.(*Error) if !ok { t.Fatal("expected error to be of type *elastic.Error") } if e.Status != resp.StatusCode { t.Fatalf("expected status code %d; got: %d", resp.StatusCode, e.Status) } if e.Details == nil { t.Fatalf("expected error details; got: %v", e.Details) } if got, want := e.Details.Index, "elastic-test"; got != want { t.Fatalf("expected error details index %q; got: %q", want, got) } if got, want := e.Details.Type, "index_missing_exception"; got != want { t.Fatalf("expected error details type %q; got: %q", want, got) } if got, want := e.Details.Reason, "no such index"; got != want { t.Fatalf("expected error details reason %q; got: %q", want, got) } if got, want := len(e.Details.RootCause), 1; got != want { t.Fatalf("expected %d error details root causes; got: %d", want, got) } if got, want := e.Details.RootCause[0].Index, "elastic-test"; got != want { t.Fatalf("expected root cause index %q; got: %q", want, got) } if got, want := e.Details.RootCause[0].Type, "index_missing_exception"; got != want { t.Fatalf("expected root cause type %q; got: %q", want, got) } if got, want := e.Details.RootCause[0].Reason, "no such index"; got != want { t.Fatalf("expected root cause reason %q; got: %q", want, got) } } func TestResponseErrorHTML(t *testing.T) { raw := "HTTP/1.1 413 Request Entity Too Large\r\n" + "\r\n" + `<html> <head><title>413 Request Entity Too Large</title></head> <body bgcolor="white"> <center><h1>413 Request Entity Too Large</h1></center> <hr><center>nginx/1.6.2</center> </body> </html>` + "\r\n" r := bufio.NewReader(strings.NewReader(raw)) req, err := http.NewRequest("GET", "/", nil) if err != nil { t.Fatal(err) } resp, err := http.ReadResponse(r, nil) if err != nil { t.Fatal(err) } err = checkResponse(req, resp) if err == nil { t.Fatalf("expected error; got: %v", err) } // Check for correct error message expected := fmt.Sprintf("elastic: Error %d (%s)", http.StatusRequestEntityTooLarge, http.StatusText(http.StatusRequestEntityTooLarge)) got := err.Error() if got != expected { t.Fatalf("expected %q; got: %q", expected, got) } } func TestResponseErrorWithIgnore(t *testing.T) { raw := "HTTP/1.1 404 Not Found\r\n" + "\r\n" + `{"some":"response"}` + "\r\n" r := bufio.NewReader(strings.NewReader(raw)) req, err := http.NewRequest("HEAD", "/", nil) if err != nil { t.Fatal(err) } resp, err := http.ReadResponse(r, nil) if err != nil { t.Fatal(err) } err = checkResponse(req, resp) if err == nil { t.Fatalf("expected error; got: %v", err) } err = checkResponse(req, resp, 404) // ignore 404 errors if err != nil { t.Fatalf("expected no error; got: %v", err) } } func TestIsNotFound(t *testing.T) { if got, want := IsNotFound(nil), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(""), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(200), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(404), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(&Error{Status: 404}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(&Error{Status: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(Error{Status: 404}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(Error{Status: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(&http.Response{StatusCode: 404}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsNotFound(&http.Response{StatusCode: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } } func TestIsTimeout(t *testing.T) { if got, want := IsTimeout(nil), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(""), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(200), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(408), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(&Error{Status: 408}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(&Error{Status: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(Error{Status: 408}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(Error{Status: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(&http.Response{StatusCode: 408}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsTimeout(&http.Response{StatusCode: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } } func TestIsConflict(t *testing.T) { if got, want := IsConflict(nil), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(""), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(200), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(http.StatusConflict), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(&Error{Status: 409}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(&Error{Status: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(Error{Status: 409}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(Error{Status: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(&http.Response{StatusCode: 409}), true; got != want { t.Errorf("expected %v; got: %v", want, got) } if got, want := IsConflict(&http.Response{StatusCode: 200}), false; got != want { t.Errorf("expected %v; got: %v", want, got) } } func TestIsStatusCode(t *testing.T) { tests := []struct { Error interface{} Code int Want bool }{ // #0 { Error: nil, Code: 200, Want: false, }, // #1 { Error: "", Code: 200, Want: false, }, // #2 { Error: http.StatusConflict, Code: 409, Want: true, }, // #3 { Error: http.StatusConflict, Code: http.StatusInternalServerError, Want: false, }, // #4 { Error: &Error{Status: http.StatusConflict}, Code: 409, Want: true, }, // #5 { Error: Error{Status: http.StatusConflict}, Code: 409, Want: true, }, // #6 { Error: &http.Response{StatusCode: http.StatusConflict}, Code: 409, Want: true, }, } for i, tt := range tests { if have, want := IsStatusCode(tt.Error, tt.Code), tt.Want; have != want { t.Errorf("#%d: have %v, want %v", i, have, want) } } } |