|
| 1 | +package lens |
| 2 | + |
| 3 | +import ( |
| 4 | + "encoding/json" |
| 5 | + "fmt" |
| 6 | + "os" |
| 7 | + "testing" |
| 8 | + "time" |
| 9 | + |
| 10 | + "github.com/RTradeLtd/Lens/analyzer/images" |
| 11 | + "github.com/RTradeLtd/Lens/logs" |
| 12 | + "github.com/RTradeLtd/Lens/models" |
| 13 | + "github.com/RTradeLtd/Lens/search" |
| 14 | + "github.com/RTradeLtd/config" |
| 15 | + "github.com/RTradeLtd/rtfs" |
| 16 | +) |
| 17 | + |
| 18 | +const ( |
| 19 | + testHash = "QmSi9TLyzTXmrLMXDvhztDoX3jghoG3vcRrnPkLvGgfpdW" |
| 20 | + testHashPdf = "QmTbvUMmniE7wUP1ucbtC9s4ree7s8mSiQBt1c4odzKnY4" |
| 21 | + testHashMarkdown = "QmS5yadpmuu5hPz884XoRFnTTTKaTS4GmdJddd7maysznm" |
| 22 | + testHashJpg = "QmNWaM9vM4LUs8ZUHThAqC3hCHeQF8fYdJhLjJMwzJmzYS" |
| 23 | + defaultConfig = "test/config.json" |
| 24 | +) |
| 25 | + |
| 26 | +func TestLens_Integration(t *testing.T) { |
| 27 | + if os.Getenv("TEST") != "integration" { |
| 28 | + t.Skip("skipping integration test", t.Name()) |
| 29 | + } |
| 30 | + |
| 31 | + // load config, instantiate everything |
| 32 | + cfg, err := config.LoadConfig(defaultConfig) |
| 33 | + if err != nil { |
| 34 | + t.Fatal(err) |
| 35 | + } |
| 36 | + ipfsAPI := fmt.Sprintf("%s:%s", cfg.IPFS.APIConnection.Host, cfg.IPFS.APIConnection.Port) |
| 37 | + manager, err := rtfs.NewManager(ipfsAPI, nil, 1*time.Minute) |
| 38 | + if err != nil { |
| 39 | + t.Fatal(err) |
| 40 | + } |
| 41 | + var l, _ = logs.NewLogger("", false) |
| 42 | + ia, err := images.NewAnalyzer(images.ConfigOpts{ |
| 43 | + ModelLocation: "tmp", |
| 44 | + }, l) |
| 45 | + if err != nil { |
| 46 | + t.Fatal(err) |
| 47 | + } |
| 48 | + searcher, err := search.NewService("/tmp/integration_test/badgerds-lens") |
| 49 | + if err != nil { |
| 50 | + t.Fatal(err) |
| 51 | + } |
| 52 | + defer searcher.Close() |
| 53 | + defer os.RemoveAll("/tmp/integration_test/badgerds-lens") |
| 54 | + service, err := NewService(ConfigOpts{ |
| 55 | + UseChainAlgorithm: true, |
| 56 | + }, *cfg, manager, ia, searcher, l) |
| 57 | + if err != nil { |
| 58 | + t.Fatal(err) |
| 59 | + } |
| 60 | + |
| 61 | + /////////////////////// |
| 62 | + // INTEGRATION TESTS // |
| 63 | + /////////////////////// |
| 64 | + |
| 65 | + // magnify and store object |
| 66 | + metadata, err := service.Magnify(testHash, false) |
| 67 | + if err != nil { |
| 68 | + t.Fatal(err) |
| 69 | + } |
| 70 | + resp, err := service.Store(testHash, metadata) |
| 71 | + if err != nil { |
| 72 | + t.Fatal(err) |
| 73 | + } |
| 74 | + keywordBytes, err := service.search.Get(metadata.Summary[0]) |
| 75 | + if err != nil { |
| 76 | + t.Fatal(err) |
| 77 | + } |
| 78 | + keyword := models.Keyword{} |
| 79 | + if err = json.Unmarshal(keywordBytes, &keyword); err != nil { |
| 80 | + t.Fatal(err) |
| 81 | + } |
| 82 | + |
| 83 | + // query for identifier |
| 84 | + _, err = service.Get("protocols") |
| 85 | + if err != nil { |
| 86 | + t.Fatal(err) |
| 87 | + } |
| 88 | + |
| 89 | + // retrieve stored object |
| 90 | + var out models.Object |
| 91 | + if err = service.ipfs.DagGet(resp.ContentHash, &out); err != nil { |
| 92 | + t.Fatal(err) |
| 93 | + } |
| 94 | + if out.LensID != resp.LensID { |
| 95 | + t.Errorf("expected id '%s', found '%s'", resp.LensID, out.LensID) |
| 96 | + } |
| 97 | + _, err = service.ipfs.Cat(out.Name) |
| 98 | + if err != nil { |
| 99 | + t.Fatal(err) |
| 100 | + } |
| 101 | + |
| 102 | + // test pdf index and storage |
| 103 | + metadata, err = service.Magnify(testHashPdf, false) |
| 104 | + if err != nil { |
| 105 | + t.Fatal(err) |
| 106 | + } |
| 107 | + resp, err = service.Store(testHashPdf, metadata) |
| 108 | + if err != nil { |
| 109 | + t.Fatal(err) |
| 110 | + } |
| 111 | + |
| 112 | + // try to update existing object and retrieve it from IPFS |
| 113 | + metadata.Category = "bobheadxi" |
| 114 | + o, err := service.Update(resp.LensID, testHashPdf, metadata) |
| 115 | + if err != nil { |
| 116 | + t.Fatalf("failed to update object: %s", err.Error()) |
| 117 | + } |
| 118 | + var updated models.Object |
| 119 | + b, err := service.Get(o.LensID.String()) |
| 120 | + if err != nil { |
| 121 | + t.Fatalf("failed to retrieve object: %s", err.Error()) |
| 122 | + } |
| 123 | + json.Unmarshal(b, &updated) |
| 124 | + if updated.MetaData.Category != metadata.Category { |
| 125 | + t.Errorf("expected category '%s', found '%s'", metadata.Category, updated.MetaData.Category) |
| 126 | + } |
| 127 | + if updated.LensID != o.LensID { |
| 128 | + t.Errorf("expected id '%s', got '%s'", o.LensID, updated.LensID) |
| 129 | + } |
| 130 | +} |
0 commit comments