You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
5.1 KiB
180 lines
5.1 KiB
// Copyright 2012-present Oliver Eilhard. All rights reserved. |
|
// Use of this source code is governed by a MIT-license. |
|
// See http://olivere.mit-license.org/license.txt for details. |
|
|
|
package elastic |
|
|
|
import ( |
|
"context" |
|
"testing" |
|
) |
|
|
|
func TestAliasesBuildURL(t *testing.T) { |
|
client := setupTestClient(t) |
|
|
|
tests := []struct { |
|
Indices []string |
|
Expected string |
|
}{ |
|
{ |
|
[]string{}, |
|
"/_aliases", |
|
}, |
|
{ |
|
[]string{"index1"}, |
|
"/index1/_aliases", |
|
}, |
|
{ |
|
[]string{"index1", "index2"}, |
|
"/index1%2Cindex2/_aliases", |
|
}, |
|
} |
|
|
|
for i, test := range tests { |
|
path, _, err := client.Aliases().Index(test.Indices...).buildURL() |
|
if err != nil { |
|
t.Errorf("case #%d: %v", i+1, err) |
|
continue |
|
} |
|
if path != test.Expected { |
|
t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) |
|
} |
|
} |
|
} |
|
|
|
func TestAliases(t *testing.T) { |
|
var err error |
|
|
|
client := setupTestClientAndCreateIndex(t) |
|
|
|
// Some tweets |
|
tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} |
|
tweet2 := tweet{User: "sandrae", Message: "Cycling is fun."} |
|
tweet3 := tweet{User: "olivere", Message: "Another unrelated topic."} |
|
|
|
// Add tweets to first index |
|
_, err = client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
_, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
// Add tweets to second index |
|
_, err = client.Index().Index(testIndexName2).Type("tweet").Id("3").BodyJson(&tweet3).Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
|
|
// Flush |
|
_, err = client.Flush().Index(testIndexName).Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
_, err = client.Flush().Index(testIndexName2).Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
|
|
// Alias should not yet exist |
|
aliasesResult1, err := client.Aliases(). |
|
Index(testIndexName, testIndexName2). |
|
//Pretty(true). |
|
Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
if len(aliasesResult1.Indices) != 2 { |
|
t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult1.Indices)) |
|
} |
|
for indexName, indexDetails := range aliasesResult1.Indices { |
|
if len(indexDetails.Aliases) != 0 { |
|
t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases)) |
|
} |
|
} |
|
|
|
// Add both indices to a new alias |
|
aliasCreate, err := client.Alias(). |
|
Add(testIndexName, testAliasName). |
|
Add(testIndexName2, testAliasName). |
|
//Pretty(true). |
|
Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
if !aliasCreate.Acknowledged { |
|
t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasCreate.Acknowledged) |
|
} |
|
|
|
// Alias should now exist |
|
aliasesResult2, err := client.Aliases(). |
|
Index(testIndexName, testIndexName2). |
|
//Pretty(true). |
|
Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
if len(aliasesResult2.Indices) != 2 { |
|
t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult2.Indices)) |
|
} |
|
for indexName, indexDetails := range aliasesResult2.Indices { |
|
if len(indexDetails.Aliases) != 1 { |
|
t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases)) |
|
} |
|
} |
|
|
|
// Check the reverse function: |
|
indexInfo1, found := aliasesResult2.Indices[testIndexName] |
|
if !found { |
|
t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found) |
|
} |
|
aliasFound := indexInfo1.HasAlias(testAliasName) |
|
if !aliasFound { |
|
t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName, aliasFound) |
|
} |
|
|
|
// Check the reverse function: |
|
indexInfo2, found := aliasesResult2.Indices[testIndexName2] |
|
if !found { |
|
t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found) |
|
} |
|
aliasFound = indexInfo2.HasAlias(testAliasName) |
|
if !aliasFound { |
|
t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName2, aliasFound) |
|
} |
|
|
|
// Remove first index should remove two tweets, so should only yield 1 |
|
aliasRemove1, err := client.Alias(). |
|
Remove(testIndexName, testAliasName). |
|
//Pretty(true). |
|
Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
if !aliasRemove1.Acknowledged { |
|
t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasRemove1.Acknowledged) |
|
} |
|
|
|
// Alias should now exist only for index 2 |
|
aliasesResult3, err := client.Aliases().Index(testIndexName, testIndexName2).Do(context.TODO()) |
|
if err != nil { |
|
t.Fatal(err) |
|
} |
|
if len(aliasesResult3.Indices) != 2 { |
|
t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult3.Indices)) |
|
} |
|
for indexName, indexDetails := range aliasesResult3.Indices { |
|
if indexName == testIndexName { |
|
if len(indexDetails.Aliases) != 0 { |
|
t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases)) |
|
} |
|
} else if indexName == testIndexName2 { |
|
if len(indexDetails.Aliases) != 1 { |
|
t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases)) |
|
} |
|
} else { |
|
t.Errorf("got index %s", indexName) |
|
} |
|
} |
|
}
|
|
|