aliases_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // Copyright 2012-2015 Oliver Eilhard. All rights reserved.
  2. // Use of this source code is governed by a MIT-license.
  3. // See http://olivere.mit-license.org/license.txt for details.
  4. package elastic
  5. import (
  6. "testing"
  7. )
  8. func TestAliases(t *testing.T) {
  9. var err error
  10. client := setupTestClientAndCreateIndex(t)
  11. // Some tweets
  12. tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."}
  13. tweet2 := tweet{User: "sandrae", Message: "Cycling is fun."}
  14. tweet3 := tweet{User: "olivere", Message: "Another unrelated topic."}
  15. // Add tweets to first index
  16. _, err = client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do()
  17. if err != nil {
  18. t.Fatal(err)
  19. }
  20. _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do()
  21. if err != nil {
  22. t.Fatal(err)
  23. }
  24. // Add tweets to second index
  25. _, err = client.Index().Index(testIndexName2).Type("tweet").Id("3").BodyJson(&tweet3).Do()
  26. if err != nil {
  27. t.Fatal(err)
  28. }
  29. // Flush
  30. _, err = client.Flush().Index(testIndexName).Do()
  31. if err != nil {
  32. t.Fatal(err)
  33. }
  34. _, err = client.Flush().Index(testIndexName2).Do()
  35. if err != nil {
  36. t.Fatal(err)
  37. }
  38. // Alias should not yet exist
  39. aliasesResult1, err := client.Aliases().
  40. Indices(testIndexName, testIndexName2).
  41. //Pretty(true).
  42. Do()
  43. if err != nil {
  44. t.Fatal(err)
  45. }
  46. if len(aliasesResult1.Indices) != 2 {
  47. t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult1.Indices))
  48. }
  49. for indexName, indexDetails := range aliasesResult1.Indices {
  50. if len(indexDetails.Aliases) != 0 {
  51. t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases))
  52. }
  53. }
  54. // Add both indices to a new alias
  55. aliasCreate, err := client.Alias().
  56. Add(testIndexName, testAliasName).
  57. Add(testIndexName2, testAliasName).
  58. //Pretty(true).
  59. Do()
  60. if err != nil {
  61. t.Fatal(err)
  62. }
  63. if !aliasCreate.Acknowledged {
  64. t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasCreate.Acknowledged)
  65. }
  66. // Alias should now exist
  67. aliasesResult2, err := client.Aliases().
  68. Indices(testIndexName, testIndexName2).
  69. //Pretty(true).
  70. Do()
  71. if err != nil {
  72. t.Fatal(err)
  73. }
  74. if len(aliasesResult2.Indices) != 2 {
  75. t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult2.Indices))
  76. }
  77. for indexName, indexDetails := range aliasesResult2.Indices {
  78. if len(indexDetails.Aliases) != 1 {
  79. t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases))
  80. }
  81. }
  82. // Check the reverse function:
  83. indexInfo1, found := aliasesResult2.Indices[testIndexName]
  84. if !found {
  85. t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found)
  86. }
  87. aliasFound := indexInfo1.HasAlias(testAliasName)
  88. if !aliasFound {
  89. t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName, aliasFound)
  90. }
  91. // Check the reverse function:
  92. indexInfo2, found := aliasesResult2.Indices[testIndexName2]
  93. if !found {
  94. t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found)
  95. }
  96. aliasFound = indexInfo2.HasAlias(testAliasName)
  97. if !aliasFound {
  98. t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName2, aliasFound)
  99. }
  100. // Remove first index should remove two tweets, so should only yield 1
  101. aliasRemove1, err := client.Alias().
  102. Remove(testIndexName, testAliasName).
  103. //Pretty(true).
  104. Do()
  105. if err != nil {
  106. t.Fatal(err)
  107. }
  108. if !aliasRemove1.Acknowledged {
  109. t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasRemove1.Acknowledged)
  110. }
  111. // Alias should now exist only for index 2
  112. aliasesResult3, err := client.Aliases().Indices(testIndexName, testIndexName2).Do()
  113. if err != nil {
  114. t.Fatal(err)
  115. }
  116. if len(aliasesResult3.Indices) != 2 {
  117. t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult3.Indices))
  118. }
  119. for indexName, indexDetails := range aliasesResult3.Indices {
  120. if indexName == testIndexName {
  121. if len(indexDetails.Aliases) != 0 {
  122. t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases))
  123. }
  124. } else if indexName == testIndexName2 {
  125. if len(indexDetails.Aliases) != 1 {
  126. t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases))
  127. }
  128. } else {
  129. t.Errorf("got index %s", indexName)
  130. }
  131. }
  132. }