コード例 #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 AzureBlobDataSetTest3()
        {
            //Microsoft.Research.Science.Data.Factory.DataSetFactory.Register(typeof(Microsoft.Research.Science.Data.NetCDF4.NetCDFDataSet));
            string uri     = @"msds:nc?file=air_8times.nc&openMode=readOnly";
            var    d       = DataSet.Open(uri);
            var    blobUri = @"msds:ab?UseDevelopmentStorage=true&Container=testcontainer767x9&Blob=testblob767x9";
            var    blobD   = AzureBlobDataSet.ArrangeData(blobUri, d, new SerializableVariableSchema[0]);

            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]);
            }

            int[] ori = new int[] { 3, 0, 0 };
            int[] shp = new int[] { 2, airShapeBlob[1], airShapeBlob[2] };

            Single[, ,] airBlob = (Single[, , ])blobD["air0"].GetData(ori, shp);
            Assert.AreEqual(3, ori[0]);
            Assert.AreEqual(0, ori[1]);
            Assert.AreEqual(0, ori[2]);
            Assert.AreEqual(2, shp[0]);
            Assert.AreEqual(airShapeBlob[1], shp[1]);
            Assert.AreEqual(airShapeBlob[2], shp[2]);


            blobD["air0"].PutData(new int[] { 3, 0, 0 }, airBlob);
            Assert.AreEqual(3, ori[0]);
            Assert.AreEqual(0, ori[1]);
            Assert.AreEqual(0, ori[2]);
            Assert.AreEqual(2, shp[0]);
            Assert.AreEqual(airShapeBlob[1], shp[1]);
            Assert.AreEqual(airShapeBlob[2], shp[2]);

            int[] ori2 = new int[] { 3, 2, 2 };
            int[] shp2 = new int[] { 2, 5, 7 };

            Single[, ,] airBlob2 = (Single[, , ])blobD["air0"].GetData(ori2, shp2);
            Assert.AreEqual(3, ori2[0]);
            Assert.AreEqual(2, ori2[1]);
            Assert.AreEqual(2, ori2[2]);
            Assert.AreEqual(2, shp2[0]);
            Assert.AreEqual(5, shp2[1]);
            Assert.AreEqual(7, shp2[2]);

            int[] ori3     = new int[] { 25 };
            int[] shp3     = new int[] { 50 };
            var   airBlob3 = blobD["lon"].GetData(ori3, shp3);

            Assert.AreEqual(25, ori3[0]);
            Assert.AreEqual(50, shp3[0]);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            string  uri     = @"msds:nc?file=\\vienna.mslab.cs.msu.su\ClimateData\air.sig995.2007.nc&openMode=readOnly";
            DataSet d       = DataSet.Open(uri);
            string  blobUri = @"msds:ab?UseDevelopmentStorage=true&Container=testcontainer&Blob=testblob";
            DataSet blobD   = /*new AzureBlobDataSet(blobUri);*/ AzureBlobDataSet.ArrangeData(blobUri, d, new SerializableVariableSchema[0]);

            AzureBlobDataSetUri azureUri = new AzureBlobDataSetUri(blobUri);

            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(azureUri.ConnectionString);

            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Retrieve a reference to a container
            CloudBlobContainer container = blobClient.GetContainerReference(azureUri.Container);

            CloudPageBlob blob = container.GetPageBlobReference(azureUri.Blob);
            Int32         schemeSize;

            using (BinaryReader br = new BinaryReader(blob.OpenRead()))
            {
                //schemeSize = br.ReadInt32();
                UTF8Encoding utf8   = new UTF8Encoding();
                byte[]       buffer = new byte[8192];
                br.BaseStream.Read(buffer, 0, 8192);
                string sizeStr = utf8.GetString(buffer);
                Console.WriteLine(sizeStr);
                //schemeSize = Int32.Parse(sizeStr);
                //br.BaseStream.Seek(512, SeekOrigin.Begin);
                //DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataSetInfo));
                //byte[] scheme = new byte[schemeSize];
                //br.BaseStream.Read(scheme, 0, schemeSize);
                //info = (DataSetInfo)serializer.ReadObject(new MemoryStream(scheme));
            }

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

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

            blobD["lat"].PutData(a);

            //foreach (var i in a) Console.WriteLine(i.ToString());

            foreach (var i in blobD["lat"].Metadata)
            {
                Console.WriteLine(i.Key.ToString() + " = " + i.Value.ToString());
            }
            foreach (var i in blobD.Metadata)
            {
                Console.WriteLine(i.Key.ToString() + " = " + i.Value.ToString());
            }

            Console.ReadLine();
        }
コード例 #4
0
        public void SingleDimVarUpdate512Aligned()
        {
            using (DataSet sourceDs = DataSet.Open("msds:memory"))
            {
                sourceDs.AddVariable <double>("b", Enumerable.Repeat(0, 1024).Select(a => (double)a).ToArray(), "i");
                var svs = new SerializableVariableSchema("a", typeof(double), new string[] { "i" }, new System.Collections.Generic.Dictionary <string, object>());

                using (AzureBlobDataSet ds = AzureBlobDataSet.ArrangeData(string.Format(@"msds:ab?Container=tests&Blob={0}&UseDevelopmentStorage=true", new Random().NextDouble()), sourceDs, new SerializableVariableSchema[] { svs }))
                {
                    ds.Variables["a"].PutData(Enumerable.Repeat(1, 64).Select(a => (double)a).ToArray()); //64x8=512 bytes shape
                }
            }
        }
コード例 #5
0
ファイル: ProxyController.cs プロジェクト: njs/FetchClimate
        // GET http://.../JsonProxy/data?uri=dmitrov-uri&variables=name1,name2,name3
        public Dictionary <string, Array> Get(string uri, string variables)
        {
            traceSource.TraceEvent(TraceEventType.Start, 2, string.Format("Request for JSON data for {0} of {1}", variables, uri));

            if (String.IsNullOrEmpty(uri))
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    ReasonPhrase = "Dataset URI is empty or not specified"
                });
            }
            if (String.IsNullOrEmpty(variables))
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    ReasonPhrase = "Variable name is empty or not specified"
                });
            }
            string[] variableNames            = variables.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            Dictionary <string, Array> result = new Dictionary <string, Array>();
            Stopwatch sw = new Stopwatch();

            sw.Start();
            try
            {
                using (var ds = new AzureBlobDataSet(uri))
                    foreach (var name in variableNames)
                    {
                        if (!result.ContainsKey(name))
                        {
                            result.Add(name, ds[name].GetData());
                        }
                    }
                return(result);
            }
            catch (Exception exc)
            {
                traceSource.TraceEvent(TraceEventType.Error, 3, string.Format("Error getting variables {0} of dataset {1}: {2}", variables, uri, exc.Message));
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    ReasonPhrase = "Dataset access error: " + exc.Message
                });
            }
            finally
            {
                sw.Stop();
                traceSource.TraceEvent(TraceEventType.Stop, 2, string.Format("Request for JSON data is completed in {0}", sw.Elapsed));
            }
        }
コード例 #6
0
ファイル: ProxyController.cs プロジェクト: njs/FetchClimate
        // GET http://.../JsonProxy/getSchema?uri=dmitrov-uri
        public SerializableDataSetSchema Get(string uri)
        {
            traceSource.TraceEvent(TraceEventType.Information, 1, string.Format("Request for JSON schema of dataset {0}", uri));

            SerializableDataSetSchema result = null;

            if (!String.IsNullOrEmpty(uri))
            {
                var ds = new AzureBlobDataSet(uri);
                result = ConvUtils.GetSerializableSchema(ds);
            }

            if (result == null)
            {
                throw new HttpResponseException(HttpStatusCode.InternalServerError);
            }

            return(result);
        }
コード例 #7
0
        public void ByteAndSByteDataTest()
        {
            const int xsize     = 627;
            string    blobUri   = @"msds:ab?UseDevelopmentStorage=true&Container=testcontainer767x9&Blob=testblob767x17";
            var       xaxis     = new SerializableVariableSchema("x", typeof(Int32), new string[] { "x" }, null);
            var       ByteData  = new SerializableVariableSchema("ByteData", typeof(Byte), new string[] { "x" }, null);
            var       SByteData = new SerializableVariableSchema("SByteData", typeof(SByte), new string[] { "x" }, null);
            var       xdim      = new SerializableDimension("x", xsize);
            var       scheme    = new SerializableDataSetSchema(new SerializableDimension[] { xdim }, new SerializableVariableSchema[] { xaxis, ByteData, SByteData },
                                                                new System.Collections.Generic.Dictionary <string, object>());

            AzureBlobDataSet.CreateEmptySet(blobUri, scheme);
            var x      = new int[xsize];
            var Bvals  = new Byte[xsize];
            var SBvals = new SByte[xsize];

            for (int i = 0; i < xsize; ++i)
            {
                x[i] = i;
            }
            for (int i = 0; i < xsize; ++i)
            {
                Bvals[i]  = (Byte)(i % 256);
                SBvals[i] = (SByte)(i % 256 - 128);
            }
            AzureBlobDataSet set = new AzureBlobDataSet(blobUri);

            set["x"].PutData(x);
            set["ByteData"].PutData(Bvals);
            set["SByteData"].PutData(SBvals);

            var receivedByteData  = (Byte[])set["ByteData"].GetData();
            var receivedSByteData = (SByte[])set["SByteData"].GetData();

            for (int i = 0; i < xsize; ++i)
            {
                Assert.AreEqual((Byte)(i % 256), receivedByteData[i]);
                Assert.AreEqual((SByte)(i % 256 - 128), receivedSByteData[i]);
            }
        }
コード例 #8
0
        public void TestMethod1()
        {
            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));
            DataSet blobD = AzureBlobDataSet.ArrangeData(blobUri, d, new SerializableVariableSchema[] { schema });

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

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

            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"]);

            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]);

            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]);
            }
        }
コード例 #9
0
        static void Main(string[] args)
        {
            var schema = new SerializableDataSetSchema(
                new SerializableDimension[] {
                new SerializableDimension("i", 30000),
                new SerializableDimension("j", 30000)
            },
                new SerializableVariableSchema[] {
                new SerializableVariableSchema("vals", typeof(double), new string[] { "i", "j" }, null)
            },
                null
                );
            string BlobConnectionAccountName = @"fetchclimate2";
            string BlobConnectionAccountKey  = @"vQpyUA7h5QFX6VlEH944gyv/h2Kx//WDy32brNip+YKDpsrN5/pxcSOnP2igQQ5pkA8lRXkmqmAYrgB29nwo/w==";
            string uri = @"msds:ab?DefaultEndpointsProtocol=http&Container=testcontainer&Blob=testBlob30000x30000&AccountName=" + BlobConnectionAccountName + @"&AccountKey=" + BlobConnectionAccountKey;

            try
            {
                var ds = AzureBlobDataSet.CreateEmptySet(uri, schema);
                double[,] data = new double[1, 30000];
                for (int i = 0; i < 30000; ++i)
                {
                    data[0, i] = (double)i;
                }
                ds["vals"].PutData(new int[] { 29999, 0 }, data);
                var recvData = (double[, ])ds["vals"].GetData(new int[] { 29999, 0 }, new int[] { 1, 30000 });
                for (int i = 0; i < 30000; ++i)
                {
                    if (data[0, i] != recvData[0, i])
                    {
                        throw new Exception("difference at " + i.ToString());
                    }
                }
                Console.WriteLine("Everything is successful!");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadLine();

            //delete test blob
            try
            {
                AzureBlobDataSetUri azureUri = null;
                if (DataSetUri.IsDataSetUri(uri))
                {
                    azureUri = new AzureBlobDataSetUri(uri);
                }
                else
                {
                    azureUri = AzureBlobDataSetUri.ToUri(uri);
                }

                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(azureUri.ConnectionString);

                CloudBlobClient    blobClient = storageAccount.CreateCloudBlobClient();
                CloudBlobContainer container  = blobClient.GetContainerReference(azureUri.Container);
                CloudPageBlob      blob       = container.GetPageBlobReference(azureUri.Blob);
                blob.DeleteIfExists();
                Console.WriteLine("Deleted test blob successfully!");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadLine();
        }
コード例 #10
0
        public void ByteAndSByte3DDataTest()
        {
            const int xsize     = 157;
            const int ysize     = 231;
            const int zsize     = 73;
            string    blobUri   = @"msds:ab?UseDevelopmentStorage=true&Container=testcontainer767x9&Blob=testblob767x10";
            var       xaxis     = new SerializableVariableSchema("x", typeof(Int32), new string[] { "x" }, null);
            var       yaxis     = new SerializableVariableSchema("y", typeof(Int32), new string[] { "y" }, null);
            var       zaxis     = new SerializableVariableSchema("z", typeof(Int32), new string[] { "z" }, null);
            var       ByteData  = new SerializableVariableSchema("ByteData", typeof(Byte), new string[] { "x", "y", "z" }, null);
            var       SByteData = new SerializableVariableSchema("SByteData", typeof(SByte), new string[] { "x", "y", "z" }, null);
            var       xdim      = new SerializableDimension("x", xsize);
            var       ydim      = new SerializableDimension("y", ysize);
            var       zdim      = new SerializableDimension("z", zsize);
            var       scheme    = new SerializableDataSetSchema(new SerializableDimension[] { xdim, ydim, zdim }, new SerializableVariableSchema[] { xaxis, yaxis, zaxis, ByteData, SByteData },
                                                                new System.Collections.Generic.Dictionary <string, object>());

            AzureBlobDataSet.CreateEmptySet(blobUri, scheme);
            var x      = new int[xsize];
            var y      = new int[ysize];
            var z      = new int[zsize];
            var Bvals  = new Byte[xsize, ysize, zsize];
            var SBvals = new SByte[xsize, ysize, zsize];

            for (int i = 0; i < xsize; ++i)
            {
                x[i] = i;
            }
            for (int i = 0; i < ysize; ++i)
            {
                y[i] = i;
            }
            for (int i = 0; i < zsize; ++i)
            {
                z[i] = i;
            }
            for (int i = 0; i < xsize; ++i)
            {
                for (int j = 0; j < ysize; ++j)
                {
                    for (int k = 0; k < zsize; ++k)
                    {
                        Bvals[i, j, k]  = (Byte)((i + j + k) % 256);
                        SBvals[i, j, k] = (SByte)((i + j + k) % 256 - 128);
                    }
                }
            }
            AzureBlobDataSet set = new AzureBlobDataSet(blobUri);

            set["x"].PutData(x);
            set["y"].PutData(y);
            set["z"].PutData(z);
            set["ByteData"].PutData(Bvals);
            set["SByteData"].PutData(SBvals);

            var receivedByteData  = (Byte[, , ])set["ByteData"].GetData();
            var receivedSByteData = (SByte[, , ])set["SByteData"].GetData();

            for (int i = 0; i < xsize; ++i)
            {
                for (int j = 0; j < ysize; ++j)
                {
                    for (int k = 0; k < zsize; ++k)
                    {
                        Assert.AreEqual((Byte)((i + j + k) % 256), receivedByteData[i, j, k]);
                        Assert.AreEqual((SByte)((i + j + k) % 256 - 128), receivedSByteData[i, j, k]);
                    }
                }
            }
        }
コード例 #11
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]);
            }
        }
コード例 #12
0
        public void AzureBlobDataSetTest2()
        {
            const int xsize   = 157;
            const int ysize   = 231;
            const int zsize   = 73;
            string    blobUri = @"msds:ab?UseDevelopmentStorage=true&Container=testcontainer767x9&Blob=testblob767x10";
            var       xaxis   = new SerializableVariableSchema("x", typeof(Int32), new string[] { "x" }, null);
            var       yaxis   = new SerializableVariableSchema("y", typeof(Int32), new string[] { "y" }, null);
            var       zaxis   = new SerializableVariableSchema("z", typeof(Int32), new string[] { "z" }, null);
            var       data    = new SerializableVariableSchema("data", typeof(Int32), new string[] { "x", "y", "z" }, null);
            var       xdim    = new SerializableDimension("x", xsize);
            var       ydim    = new SerializableDimension("y", ysize);
            var       zdim    = new SerializableDimension("z", zsize);
            var       scheme  = new SerializableDataSetSchema(new SerializableDimension[] { xdim, ydim, zdim }, new SerializableVariableSchema[] { xaxis, yaxis, zaxis, data },
                                                              new System.Collections.Generic.Dictionary <string, object>());

            scheme.Metadata.Add("metaTest", new ObjectWithTypeString(new string[] { "test1", "test2", "test3" }));
            AzureBlobDataSet.CreateEmptySet(blobUri, scheme);
            var x    = new int[xsize];
            var y    = new int[ysize];
            var z    = new int[zsize];
            var vals = new int[xsize, ysize, zsize];

            for (int i = 0; i < xsize; ++i)
            {
                x[i] = i;
            }
            for (int i = 0; i < ysize; ++i)
            {
                y[i] = i;
            }
            for (int i = 0; i < zsize; ++i)
            {
                z[i] = i;
            }
            for (int i = 0; i < xsize; ++i)
            {
                for (int j = 0; j < ysize; ++j)
                {
                    for (int k = 0; k < zsize; ++k)
                    {
                        vals[i, j, k] = i * j * k;
                    }
                }
            }
            AzureBlobDataSet set = new AzureBlobDataSet(blobUri);

            set["x"].PutData(x);
            set["y"].PutData(y);
            set["z"].PutData(z);
            set["data"].PutData(vals);

            var receivedData = (int[, , ])set["data"].GetData();

            for (int i = 0; i < xsize; ++i)
            {
                for (int j = 0; j < ysize; ++j)
                {
                    for (int k = 0; k < zsize; ++k)
                    {
                        Assert.AreEqual(i * j * k, receivedData[i, j, k]);
                    }
                }
            }

            var meta = (string[])set.Metadata["metaTest"];

            Assert.AreEqual("test1", meta[0]);
            Assert.AreEqual("test2", meta[1]);
            Assert.AreEqual("test3", meta[2]);
        }