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.
 
 
 

127 lines
2.7 KiB

  1. // Copyright 2016 The Go Authors. All rights reserved.
  2. //
  3. // Use of this source code is governed by a BSD-style
  4. // license that can be found in the LICENSE file or at
  5. // https://developers.google.com/open-source/licenses/bsd.
  6. package database
  7. import (
  8. "math"
  9. "strconv"
  10. "testing"
  11. "google.golang.org/appengine/aetest"
  12. "google.golang.org/appengine/search"
  13. "github.com/golang/gddo/doc"
  14. )
  15. var pdoc = &doc.Package{
  16. ImportPath: "github.com/golang/test",
  17. Name: "test",
  18. Synopsis: "This is a test package.",
  19. Fork: true,
  20. Stars: 10,
  21. }
  22. func TestPutIndexWithEmptyId(t *testing.T) {
  23. c, done, err := aetest.NewContext()
  24. if err != nil {
  25. t.Fatal(err)
  26. }
  27. defer done()
  28. if err := PutIndex(c, nil, "", 0, 0); err == nil {
  29. t.Errorf("PutIndex succeeded unexpectedly")
  30. }
  31. }
  32. func TestPutIndexCreateNilDoc(t *testing.T) {
  33. c, done, err := aetest.NewContext()
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. defer done()
  38. if err := PutIndex(c, nil, "12345", -1, 2); err == nil {
  39. t.Errorf("PutIndex succeeded unexpectedly")
  40. }
  41. }
  42. func TestPutIndexNewPackageAndUpdate(t *testing.T) {
  43. c, done, err := aetest.NewContext()
  44. if err != nil {
  45. t.Fatal(err)
  46. }
  47. defer done()
  48. // Put a new package into search index.
  49. if err := PutIndex(c, pdoc, "12345", 0.99, 1); err != nil {
  50. t.Fatal(err)
  51. }
  52. // Verify the package was put in is as expected.
  53. idx, err := search.Open("packages")
  54. if err != nil {
  55. t.Fatal(err)
  56. }
  57. var got Package
  58. if err = idx.Get(c, "12345", &got); err != nil && err != search.ErrNoSuchDocument {
  59. t.Fatal(err)
  60. }
  61. wanted := Package{
  62. Name: pdoc.Name,
  63. Path: pdoc.ImportPath,
  64. Synopsis: pdoc.Synopsis,
  65. ImportCount: 1,
  66. Fork: true,
  67. Stars: 10,
  68. Score: 0.99,
  69. }
  70. if got != wanted {
  71. t.Errorf("PutIndex got %v, want %v", got, wanted)
  72. }
  73. // Update the import count of the package.
  74. if err := PutIndex(c, nil, "12345", -1, 2); err != nil {
  75. t.Fatal(err)
  76. }
  77. if err := idx.Get(c, "12345", &got); err != nil && err != search.ErrNoSuchDocument {
  78. t.Fatal(err)
  79. }
  80. wanted.ImportCount = 2
  81. if got != wanted {
  82. t.Errorf("PutIndex got %v, want %v", got, wanted)
  83. }
  84. }
  85. func TestSearchResultSorted(t *testing.T) {
  86. c, done, err := aetest.NewContext()
  87. if err != nil {
  88. t.Fatal(err)
  89. }
  90. defer done()
  91. // Put multiple packages into the search index and the search result
  92. // should be sorted properly.
  93. id := "1"
  94. for i := 2; i < 6; i++ {
  95. id += strconv.Itoa(i)
  96. pdoc.Synopsis = id
  97. if err := PutIndex(c, pdoc, id, math.Pow(0.9, float64(i)), 10*i); err != nil {
  98. t.Fatal(err)
  99. }
  100. }
  101. got, err := Search(c, "test")
  102. if err != nil {
  103. t.Fatal(err)
  104. }
  105. wanted := []string{"123", "12", "1234", "12345"}
  106. for i, p := range got {
  107. if p.Synopsis != wanted[i] {
  108. t.Errorf("Search got %v, want %v", p.Synopsis, wanted[i])
  109. }
  110. }
  111. }