public void Ctor_MissingDatabase_NoException() { var factory = new DdbManager(_appSettingsMock.Object, _ddbFactoryLogger); factory.Invoking(x => x.Get("vlwefwef", _datasetGuid)) .Should().NotThrow <IOException>(); }
public void Add_RemoveImageAddNewImage_Ok() { using var fs = new TestFS(DbTest1ArchiveUrl, nameof(DdbFactoryTest)); _settings.StoragePath = fs.TestFolder; _appSettingsMock.Setup(o => o.Value).Returns(_settings); var factory = new DdbManager(_appSettingsMock.Object, _ddbFactoryLogger); var ddb = factory.Get(MagicStrings.PublicOrganizationSlug, _datasetGuid); const string fileName = "DJI_0028.JPG"; ddb.Remove(fileName); var path = Path.Combine(TestDataFolder, fileName); if (!File.Exists(path)) { CommonUtils.SmartDownloadFile("https://github.com/DroneDB/test_data/raw/master/test-datasets/drone_dataset_brighton_beach/" + fileName, path); } ddb.Add(fileName, File.ReadAllBytes(path)); ddb.Search(fileName).Should().HaveCount(1); }
public void Ctor_ExistingDatabase_Ok() { var factory = new DdbManager(_appSettingsMock.Object, _ddbFactoryLogger); var ddb = factory.Get(MagicStrings.PublicOrganizationSlug, _datasetGuid); ddb.Should().NotBeNull(); }
public async Task AddListRemove_HappyPath_Ok() { await using var context = GetTest1Context(); using var test = new TestFS(Test4ArchiveUrl, BaseTestFolder); var settings = JsonConvert.DeserializeObject <AppSettings>(_settingsJson); settings.DatasetsPath = Path.Combine(test.TestFolder, DdbFolder); _appSettingsMock.Setup(o => o.Value).Returns(settings); _authManagerMock.Setup(o => o.IsUserAdmin()).Returns(Task.FromResult(true)); _authManagerMock.Setup(o => o.IsOwnerOrAdmin(It.IsAny <Dataset>())).Returns(Task.FromResult(true)); var ddbManager = new DdbManager(_appSettingsMock.Object, _ddbFactoryLogger); var webUtils = new WebUtils(_authManagerMock.Object, context, _appSettingsMock.Object, _httpContextAccessorMock.Object, ddbManager); var metaManager = new MetaManager(_metaManagerLogger, ddbManager, _authManagerMock.Object, webUtils); var a = await metaManager.Add(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug, "annotations", "{\"test\":123}"); a.Data["test"].ToObject <int>().Should().Be(123); var res = await metaManager.List(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug); res.Should().HaveCount(1); res.First().Count.Should().Be(1); res.First().Key.Should().Be("annotations"); var a2 = await metaManager.Add(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug, "annotations", "{\"test\":4124,\"pippo\":\"ciao\"}"); a2.Data["test"].ToObject <int>().Should().Be(4124); a2.Data["pippo"].ToObject <string>().Should().Be("ciao"); (await metaManager.List(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug)).Should().HaveCount(1); (await metaManager.Get(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug, "annotations")) .Should().HaveCount(2); (await metaManager.Remove(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug, a.Id)).Should().Be(1); (await metaManager.Get(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug, "annotations")) .Should().HaveCount(1); (await metaManager.Unset(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug, "annotations")).Should().Be(1); (await metaManager.List(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug)).Should() .BeEmpty(); }
public void Search_MissingEntry_Empty() { using var fs = new TestFS(DbTest1ArchiveUrl, nameof(DdbFactoryTest)); _settings.StoragePath = fs.TestFolder; _appSettingsMock.Setup(o => o.Value).Returns(_settings); var factory = new DdbManager(_appSettingsMock.Object, _ddbFactoryLogger); var ddb = factory.Get(MagicStrings.PublicOrganizationSlug, _datasetGuid); var res = ddb.Search("asasdadas.jpg"); res.Should().BeEmpty(); }
public void Search_ExistingEntry_Entry1() { using var fs = new TestFS(DbTest1ArchiveUrl, nameof(DdbFactoryTest)); _settings.StoragePath = fs.TestFolder; _appSettingsMock.Setup(o => o.Value).Returns(_settings); const string fileName = "Sub/20200610_144436.jpg"; const int expectedDepth = 1; const int expectedSize = 8248241; const EntryType expectedType = EntryType.GeoImage; const string expectedHash = "f27ddc96daf9aeff3c026de8292681296c3e9d952b647235878c50f2b7b39e94"; var expectedModifiedTime = new DateTime(2020, 06, 10, 14, 44, 36); var expectedMeta = JsonConvert.DeserializeObject <Dictionary <string, object> >( "{\"captureTime\":1591800276004.8,\"focalLength\":4.16,\"focalLength35\":26.0,\"height\":3024,\"make\":\"samsung\",\"model\":\"SM-G950F\",\"orientation\":1,\"sensor\":\"samsung sm-g950f\",\"sensorHeight\":4.32,\"sensorWidth\":5.76,\"width\":4032}"); const double expectedLatitude = 45.50027; const double expectedLongitude = 10.60667; const double expectedAltitude = 141; var factory = new DdbManager(_appSettingsMock.Object, _ddbFactoryLogger); var ddb = factory.Get(MagicStrings.PublicOrganizationSlug, _datasetGuid); var list = ddb.Search(fileName).ToArray(); list.Should().HaveCount(1); var res = list.First(); res.Path.Should().Be(fileName); // TODO: Handle different timezones res.ModifiedTime.Should().BeCloseTo(expectedModifiedTime, new TimeSpan(6, 0, 0)); res.Hash.Should().Be(expectedHash); res.Depth.Should().Be(expectedDepth); res.Size.Should().Be(expectedSize); res.Type.Should().Be(expectedType); res.Properties.Should().BeEquivalentTo(expectedMeta); res.PointGeometry["geometry"]["coordinates"][0].Value <double>().Should().BeApproximately(expectedLongitude, 0.00001); res.PointGeometry["geometry"]["coordinates"][1].Value <double>().Should().BeApproximately(expectedLatitude, 0.00001); res.PointGeometry["geometry"]["coordinates"][2].Value <double>().Should().BeApproximately(expectedAltitude, 0.1); }
public async Task List_Empty_NoMeta() { await using var context = GetTest1Context(); using var test = new TestFS(Test4ArchiveUrl, BaseTestFolder); var settings = JsonConvert.DeserializeObject <AppSettings>(_settingsJson); settings.DatasetsPath = Path.Combine(test.TestFolder, DdbFolder); _appSettingsMock.Setup(o => o.Value).Returns(settings); _authManagerMock.Setup(o => o.IsUserAdmin()).Returns(Task.FromResult(true)); var ddbManager = new DdbManager(_appSettingsMock.Object, _ddbFactoryLogger); var webUtils = new WebUtils(_authManagerMock.Object, context, _appSettingsMock.Object, _httpContextAccessorMock.Object, ddbManager); var metaManager = new MetaManager(_metaManagerLogger, ddbManager, _authManagerMock.Object, webUtils); var res = await metaManager.List(MagicStrings.PublicOrganizationSlug, MagicStrings.DefaultDatasetSlug); res.Should().BeEmpty(); }
public void Search_ExistingEntry_Entry2() { using var fs = new TestFS(DbTest1ArchiveUrl, nameof(DdbFactoryTest)); _settings.StoragePath = fs.TestFolder; _appSettingsMock.Setup(o => o.Value).Returns(_settings); const string fileName = "DJI_0022.JPG"; const int expectedDepth = 0; const int expectedSize = 3872682; const EntryType expectedType = EntryType.GeoImage; const string expectedHash = "e6e57187a33951a27f51e3a86cc66c6ce43d555f0d51ba3c715fc7b707ce1477"; var expectedModifiedTime = new DateTime(2017, 04, 2, 20, 01, 27); var expectedMeta = JsonConvert.DeserializeObject <Dictionary <string, object> >( "{\"cameraPitch\":-90.0,\"cameraRoll\":0.0,\"cameraYaw\":45.29999923706055,\"captureTime\":1466699547000.0,\"focalLength\":3.4222222222222225,\"focalLength35\":20.0,\"height\":2250,\"make\":\"DJI\",\"model\":\"FC300S\",\"orientation\":1,\"sensor\":\"dji fc300s\",\"sensorHeight\":3.4650000000000003,\"sensorWidth\":6.16,\"width\":4000}"); const double expectedLatitude = 46.842952; const double expectedLongitude = -91.994052; const double expectedAltitude = 198.51; List <List <double> > expectedCoordinates = new List <List <double> >(); expectedCoordinates.Add(new List <double> { -91.99418833907131, 46.843311240786406, 158.51 }); expectedCoordinates.Add(new List <double> { -91.99457061482893, 46.843058237783886, 158.51 }); expectedCoordinates.Add(new List <double> { -91.99391510716002, 46.842591925708966, 158.51 }); expectedCoordinates.Add(new List <double> { -91.99353283170487, 46.842844926544224, 158.51 }); expectedCoordinates.Add(new List <double> { -91.99418833907131, 46.843311240786406, 158.51 }); var factory = new DdbManager(_appSettingsMock.Object, _ddbFactoryLogger); var ddb = factory.Get(MagicStrings.PublicOrganizationSlug, _datasetGuid); var list = ddb.Search(fileName).ToArray(); list.Should().HaveCount(1); var res = list.First(); res.Path.Should().Be(fileName); // TODO: Handle different timezones res.ModifiedTime.Should().BeCloseTo(expectedModifiedTime, new TimeSpan(6, 0, 0)); res.Hash.Should().Be(expectedHash); res.Depth.Should().Be(expectedDepth); res.Size.Should().Be(expectedSize); res.Type.Should().Be(expectedType); res.Properties.Should().BeEquivalentTo(expectedMeta); res.PointGeometry["geometry"]["coordinates"][0].Value <double>().Should().BeApproximately(expectedLongitude, 0.00001); res.PointGeometry["geometry"]["coordinates"][1].Value <double>().Should().BeApproximately(expectedLatitude, 0.00001); res.PointGeometry["geometry"]["coordinates"][2].Value <double>().Should().BeApproximately(expectedAltitude, 0.1); var polygon = res.PolygonGeometry; var coords = polygon["geometry"]["coordinates"][0]; for (int i = 0; i < expectedCoordinates.Count; i++) { for (int j = 0; j < expectedCoordinates[i].Count; j++) { coords[i][j].Value <double>().Should().BeApproximately(expectedCoordinates[i][j], 0.001); } } }