コード例 #1
0
        public static DataSet CreateRequestBlobDataSet(string dsUri, IFetchRequest request)
        {
            var sd = GetRequestSchemaAndData(request);
            var ds = AzureBlobDataSet.CreateSetWithSmallData(dsUri, sd.Item1, sd.Item2);

            return(ds);
        }
コード例 #2
0
        public void AzureBlobDataSetTest4CreateSetWithSmallData()
        {
            string  uri     = @"msds:nc?file=air_9times.nc&openMode=readOnly";
            DataSet d       = DataSet.Open(uri);
            string  blobUri = @"msds:ab?UseDevelopmentStorage=true&Container=testcontainer767x9&Blob=testblob767x9";
            var     schema  = new SerializableVariableSchema("testvar", typeof(Int32), new string[] { "lat" }, new System.Collections.Generic.Dictionary <string, object>());

            schema.Metadata.Add("testData", new ObjectWithTypeString(true));
            DateTime dateTimeNow = DateTime.Now;

            schema.Metadata.Add("dateTime", new ObjectWithTypeString(dateTimeNow));
            //DataSet blobD = AzureBlobDataSet.ArrangeData(blobUri, d, new SerializableVariableSchema[] { schema });
            System.Collections.Generic.Dictionary <string, Array> dataToPut = new System.Collections.Generic.Dictionary <string, Array>();
            foreach (var v in d.Variables)
            {
                dataToPut.Add(v.Name, v.GetData());
            }
            var dsscheme = d.GetSerializableSchema();
            var varList  = dsscheme.Variables.ToList();

            varList.Add(schema);
            dsscheme.Variables = varList.ToArray();
            DataSet blobD = AzureBlobDataSet.CreateSetWithSmallData(blobUri, dsscheme, dataToPut);

            var json1 = JsonConvert.SerializeObject(blobD, Formatting.Indented,
                                                    new JsonSerializerSettings()
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore
            });

            foreach (var i in blobD.Variables)
            {
                Console.WriteLine(i.Name);
            }

            Single[] a = (Single[])blobD["lat"].GetData();
            Single[] b = (Single[])d["lat"].GetData();

            var json2 = JsonConvert.SerializeObject(a, Formatting.Indented,
                                                    new JsonSerializerSettings()
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore
            });

            Assert.AreEqual(b.Length, a.Length);

            for (int i = 0; i < a.Length; ++i)
            {
                Assert.AreEqual(a[i], b[i]);
            }

            Assert.AreEqual(d["lat"].Metadata.Count, blobD["lat"].Metadata.Count);

            foreach (var i in blobD["lat"].Metadata)
            {
                Assert.IsTrue(d["lat"].Metadata.ContainsKey(i.Key));
                if (i.Value is Array)
                {
                    for (int j = 0; j < ((Array)i.Value).Length; ++j)
                    {
                        Assert.AreEqual(((Array)d["lat"].Metadata[i.Key]).GetValue(j), ((Array)i.Value).GetValue(j));
                    }
                }
                else
                {
                    Assert.AreEqual(d["lat"].Metadata[i.Key], i.Value);
                }
            }

            foreach (var i in blobD.Metadata)
            {
                Assert.IsTrue(d.Metadata.ContainsKey(i.Key));
                if (i.Value is Array)
                {
                    for (int j = 0; j < ((Array)i.Value).Length; ++j)
                    {
                        Assert.AreEqual(((Array)d.Metadata[i.Key]).GetValue(j), ((Array)i.Value).GetValue(j));
                    }
                }
                else
                {
                    Assert.AreEqual(d.Metadata[i.Key], i.Value);
                }
            }

            Assert.AreEqual(true, blobD["testvar"].Metadata["testData"]);
            double deltaTimes = (dateTimeNow - (DateTime)blobD["testvar"].Metadata["dateTime"]).TotalMilliseconds;

            Assert.IsTrue(Math.Abs(deltaTimes) <= 1.0);//JSON somewhat cuts DateTimes :(
            //Assert.AreEqual(dateTimeNow, blobD["testvar"].Metadata["dateTime"]);

            uri     = @"msds:nc?file=air_8times.nc&openMode=readOnly";
            d       = DataSet.Open(uri);
            blobUri = @"msds:ab?UseDevelopmentStorage=true&Container=testcontainer767x9&Blob=testblob767x9";
            //blobD = AzureBlobDataSet.ArrangeData(blobUri, d, new SerializableVariableSchema[0]);
            dataToPut = new System.Collections.Generic.Dictionary <string, Array>();
            foreach (var v in d.Variables)
            {
                dataToPut.Add(v.Name, v.GetData());
            }
            dsscheme = d.GetSerializableSchema();
            blobD    = AzureBlobDataSet.CreateSetWithSmallData(blobUri, dsscheme, dataToPut);

            int[] airShapeBlob = blobD["air0"].GetShape();
            int[] airShape     = d["air0"].GetShape();

            Assert.AreEqual(airShape.Length, airShapeBlob.Length);
            for (int i = 0; i < airShape.Length; ++i)
            {
                Assert.AreEqual(airShape[i], airShapeBlob[i]);
            }

            Single[, ,] airBlob = (Single[, , ])blobD["air0"].GetData(new int[] { 3, 0, 0 }, new int[] { 2, airShapeBlob[1], airShapeBlob[2] });
            Single[, ,] air     = (Single[, , ])d["air0"].GetData(new int[] { 3, 0, 0 }, new int[] { 2, airShape[1], airShape[2] });
            for (int i = 0; i < 2; ++i)
            {
                for (int j = 0; j < airShapeBlob[1]; ++j)
                {
                    for (int k = 0; k < airShapeBlob[2]; ++k)
                    {
                        Assert.AreEqual(air[i, j, k], airBlob[i, j, k]);
                    }
                }
            }

            blobD["air0"].PutData(new int[] { 3, 0, 0 }, air);
            airBlob = (Single[, , ])blobD["air0"].GetData(new int[] { 3, 0, 0 }, new int[] { 2, airShapeBlob[1], airShapeBlob[2] });

            for (int i = 0; i < 2; ++i)
            {
                for (int j = 0; j < airShapeBlob[1]; ++j)
                {
                    for (int k = 0; k < airShapeBlob[2]; ++k)
                    {
                        Assert.AreEqual(air[i, j, k], airBlob[i, j, k]);
                    }
                }
            }

            DateTime[] datesBlob = (DateTime[])blobD["_time_subset"].GetData();
            DateTime[] dates     = (DateTime[])d["_time_subset"].GetData();
            Assert.AreEqual(dates.Length, datesBlob.Length);

            for (int i = 0; i < dates.Length; ++i)
            {
                Assert.AreEqual(dates[i], datesBlob[i]);
            }

            blobD["_time_subset"].PutData(dates);
            datesBlob = (DateTime[])blobD["_time_subset"].GetData();
            Assert.AreEqual(dates.Length, datesBlob.Length);

            for (int i = 0; i < dates.Length; ++i)
            {
                Assert.AreEqual(dates[i], datesBlob[i]);
            }

            Single[, ,] airBlob2 = (Single[, , ])blobD["air0"].GetData(new int[] { 3, 2, 2 }, new int[] { 2, 5, 7 });
            Single[, ,] air2     = (Single[, , ])d["air0"].GetData(new int[] { 3, 2, 2 }, new int[] { 2, 5, 7 });
            for (int i = 0; i < 2; ++i)
            {
                for (int j = 0; j < 5; ++j)
                {
                    for (int k = 0; k < 7; ++k)
                    {
                        Assert.AreEqual(air2[i, j, k], airBlob2[i, j, k]);
                    }
                }
            }

            blobUri = @"msds:ab?UseDevelopmentStorage=true&Container=testcontainer767x9&Blob=testblob767x10";
            blobD   = AzureBlobDataSet.CreateEmptySet(blobUri, d.GetSerializableSchema());

            blobD["_time_subset"].PutData(dates);
            datesBlob = (DateTime[])blobD["_time_subset"].GetData();
            Assert.AreEqual(dates.Length, datesBlob.Length);

            for (int i = 0; i < dates.Length; ++i)
            {
                Assert.AreEqual(dates[i], datesBlob[i]);
            }
        }