(t *testing.T)
| 767 | } |
| 768 | |
| 769 | func TestEvaluateFunction(t *testing.T) { |
| 770 | base.SetUpTestLogging(t, base.LevelInfo, base.KeyImport) |
| 771 | db, ctx := setupTestDB(t) |
| 772 | defer db.Close(ctx) |
| 773 | |
| 774 | // Simulate unexpected error invoking import filter for document |
| 775 | body := Body{"key": "value", "version": "1a"} |
| 776 | source := "illegal function(doc) {}" |
| 777 | importFilterFunc := NewImportFilterFunction(base.TestCtx(t), source, 0) |
| 778 | result, err := importFilterFunc.EvaluateFunction(base.TestCtx(t), body) |
| 779 | assert.Error(t, err, "Unexpected token function error") |
| 780 | assert.False(t, result, "Function evaluation result should be false") |
| 781 | |
| 782 | // Simulate boolean return value from import filter function |
| 783 | body = Body{"key": "value", "version": "2a"} |
| 784 | source = `function(doc) { if (doc.version == "2a") { return true; } else { return false; }}` |
| 785 | importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0) |
| 786 | result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body) |
| 787 | assert.NoError(t, err, "Import filter function shouldn't throw any error") |
| 788 | assert.True(t, result, "Import filter function should return boolean value true") |
| 789 | |
| 790 | // Simulate non-boolean return value from import filter function; default switch case |
| 791 | body = Body{"key": "value", "version": "2b"} |
| 792 | source = `function(doc) { if (doc.version == "2b") { return 1.01; } else { return 0.01; }}` |
| 793 | importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0) |
| 794 | result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body) |
| 795 | assert.Error(t, err, "Import filter function returned non-boolean value") |
| 796 | assert.False(t, result, "Import filter function evaluation result should be false") |
| 797 | |
| 798 | // Simulate string return value true from import filter function |
| 799 | body = Body{"key": "value", "version": "1a"} |
| 800 | source = `function(doc) { if (doc.version == "1a") { return "true"; } else { return "false"; }}` |
| 801 | importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0) |
| 802 | result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body) |
| 803 | assert.NoError(t, err, "Import filter function shouldn't throw any error") |
| 804 | assert.True(t, result, "Import filter function should return true") |
| 805 | |
| 806 | // Simulate string return value false from import filter function |
| 807 | body = Body{"key": "value", "version": "2a"} |
| 808 | source = `function(doc) { if (doc.version == "1a") { return "true"; } else { return "false"; }}` |
| 809 | importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0) |
| 810 | result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body) |
| 811 | assert.NoError(t, err, "Import filter function shouldn't throw any error") |
| 812 | assert.False(t, result, "Import filter function should return false") |
| 813 | |
| 814 | // Simulate strconv.ParseBool: parsing "TruE": invalid syntax |
| 815 | body = Body{"key": "value", "version": "1a"} |
| 816 | source = `function(doc) { if (doc.version == "1a") { return "TruE"; } else { return "FaLsE"; }}` |
| 817 | importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0) |
| 818 | result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body) |
| 819 | assert.Error(t, err, `strconv.ParseBool: parsing "TruE": invalid syntax`) |
| 820 | assert.False(t, result, "Import filter function should return true") |
| 821 | } |
| 822 | |
| 823 | func TestImportStampClusterUUID(t *testing.T) { |
| 824 | if !base.TestUseXattrs() { |
nothing calls this directly
no test coverage detected