1// Copyright 2012-present 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 5package elastic 6 7import ( 8 "context" 9 "encoding/json" 10 "testing" 11) 12 13func TestUpdateWithScript(t *testing.T) { 14 client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) 15 16 // Get original 17 getRes, err := client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) 18 if err != nil { 19 t.Fatal(err) 20 } 21 var original tweet 22 if err := json.Unmarshal(*getRes.Source, &original); err != nil { 23 t.Fatal(err) 24 } 25 26 // Update with script 27 updRes, err := client.Update().Index(testIndexName).Type("doc").Id("1"). 28 Script( 29 NewScript(`ctx._source.message = "Updated message text."`).Lang("painless"), 30 ). 31 Do(context.TODO()) 32 if err != nil { 33 t.Fatal(err) 34 } 35 if updRes == nil { 36 t.Fatal("response is nil") 37 } 38 if want, have := "updated", updRes.Result; want != have { 39 t.Fatalf("want Result = %q, have %v", want, have) 40 } 41 42 // Get new version 43 getRes, err = client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) 44 if err != nil { 45 t.Fatal(err) 46 } 47 var updated tweet 48 if err := json.Unmarshal(*getRes.Source, &updated); err != nil { 49 t.Fatal(err) 50 } 51 52 if want, have := original.User, updated.User; want != have { 53 t.Fatalf("want User = %q, have %v", want, have) 54 } 55 if want, have := "Updated message text.", updated.Message; want != have { 56 t.Fatalf("want Message = %q, have %v", want, have) 57 } 58} 59 60func TestUpdateWithScriptID(t *testing.T) { 61 client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) 62 63 // Get original 64 getRes, err := client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) 65 if err != nil { 66 t.Fatal(err) 67 } 68 var original tweet 69 if err := json.Unmarshal(*getRes.Source, &original); err != nil { 70 t.Fatal(err) 71 } 72 73 // Set script with ID 74 scriptID := "example-script-id" 75 _, err = client.DeleteScript().Id(scriptID).Do(context.Background()) 76 if err != nil && !IsNotFound(err) { 77 t.Fatal(err) 78 } 79 _, err = client.PutScript(). 80 Id(scriptID). 81 BodyString(`{ 82 "script": { 83 "lang": "painless", 84 "source": "ctx._source.message = params.new_message" 85 } 86 }`). 87 Do(context.Background()) 88 if err != nil { 89 t.Fatal(err) 90 } 91 92 // Update with script 93 updRes, err := client.Update().Index(testIndexName).Type("doc").Id("1"). 94 Script( 95 NewScriptStored(scriptID).Param("new_message", "Updated message text."), 96 ). 97 Do(context.TODO()) 98 if err != nil { 99 t.Fatal(err) 100 } 101 if updRes == nil { 102 t.Fatal("response is nil") 103 } 104 if want, have := "updated", updRes.Result; want != have { 105 t.Fatalf("want Result = %q, have %v", want, have) 106 } 107 108 // Get new version 109 getRes, err = client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) 110 if err != nil { 111 t.Fatal(err) 112 } 113 var updated tweet 114 if err := json.Unmarshal(*getRes.Source, &updated); err != nil { 115 t.Fatal(err) 116 } 117 118 if want, have := original.User, updated.User; want != have { 119 t.Fatalf("want User = %q, have %v", want, have) 120 } 121 if want, have := "Updated message text.", updated.Message; want != have { 122 t.Fatalf("want Message = %q, have %v", want, have) 123 } 124} 125