public Maybe <CloudApplicationDefinition> Inspect()
        {
            var            runtimeSerializer = new CloudFormatter();
            var            definitionBlob    = _blobs.GetBlob <CloudApplicationDefinition>(ContainerName, ApplicationDefinitionBlobName, runtimeSerializer);
            Maybe <byte[]> packageBlob;
            string         packageETag;

            if (definitionBlob.HasValue)
            {
                packageBlob = _blobs.GetBlobIfModified <byte[]>(AssemblyLoader.ContainerName, AssemblyLoader.PackageBlobName, definitionBlob.Value.PackageETag, out packageETag, runtimeSerializer);
                if (!packageBlob.HasValue || definitionBlob.Value.PackageETag == packageETag)
                {
                    return(definitionBlob.Value);
                }
            }
            else
            {
                packageBlob = _blobs.GetBlob <byte[]>(AssemblyLoader.ContainerName, AssemblyLoader.PackageBlobName, out packageETag, runtimeSerializer);
            }

            if (!packageBlob.HasValue)
            {
                return(Maybe <CloudApplicationDefinition> .Empty);
            }

            var definition = Analyze(packageBlob.Value, packageETag);

            _blobs.PutBlob(ContainerName, ApplicationDefinitionBlobName, definition, runtimeSerializer);
            return(definition);
        }
예제 #2
0
		static ITableStorageProvider TableStorageProvider(IContext c)
		{
			IDataSerializer formatter;
			if (!c.TryResolve(out formatter))
			{
				formatter = new CloudFormatter();
			}

			return new TableStorageProvider(c.Resolve<CloudTableClient>(), formatter);
		}
        public void Serialization()
        {
            // overflowing message
            var om = new OverflowWrapper {ContainerName = "con", BlobName = "blo"};

            var stream = new MemoryStream();
            var serializer = new CloudFormatter();

            serializer.Serialize(om, stream, om.GetType());
            stream.Position = 0;
            var omBis = (OverflowWrapper) serializer.Deserialize(stream, typeof (OverflowWrapper));

            Assert.AreEqual(om.ContainerName, omBis.ContainerName, "#A00");
            Assert.AreEqual(om.BlobName, omBis.BlobName, "#A01");
        }
        public void UnknownType()
        {
            var formatter = new CloudFormatter();

            using (var stream = new MemoryStream())
            {
                var item = new MockWithObject {
                    Generic = DateTime.UtcNow.Second > 30 ? (object)100 : "hello"
                };
                formatter.Serialize(item, stream, typeof(MockWithObject));
                stream.Seek(0, SeekOrigin.Begin);
                var output = (MockWithObject)formatter.Deserialize(stream, typeof(MockWithObject));
                Assert.AreEqual(item.Generic, output.Generic);
            }
        }
        public void CanSetCustomDataSerializer()
        {
            var serializerInstance = new CloudFormatter();
            var providersCustom    = CloudStorage.ForInMemoryStorage().WithDataSerializer(serializerInstance).BuildStorageProviders();

            Assert.AreSame(serializerInstance, ((MemoryBlobStorageProvider)providersCustom.BlobStorage).DefaultSerializer);
            Assert.AreSame(serializerInstance, ((MemoryTableStorageProvider)providersCustom.TableStorage).DataSerializer);
            Assert.AreSame(serializerInstance, ((MemoryQueueStorageProvider)providersCustom.QueueStorage).DefaultSerializer);

            var providersDefault = CloudStorage.ForInMemoryStorage().BuildStorageProviders();

            Assert.AreNotSame(serializerInstance, ((MemoryBlobStorageProvider)providersDefault.BlobStorage).DefaultSerializer);
            Assert.AreNotSame(serializerInstance, ((MemoryTableStorageProvider)providersDefault.TableStorage).DataSerializer);
            Assert.AreNotSame(serializerInstance, ((MemoryQueueStorageProvider)providersDefault.QueueStorage).DefaultSerializer);
        }
        public QueuesModel QueryQueues()
        {
            var queueStorage          = _storage.QueueStorage;
            var inspector             = new CloudApplicationInspector(_storage.BlobStorage);
            var applicationDefinition = inspector.Inspect();
            var runtimeSerializer     = new CloudFormatter();

            var failingMessages = queueStorage.ListPersisted(FailingMessagesStoreName)
                                  .Select(key => queueStorage.GetPersisted(FailingMessagesStoreName, key, runtimeSerializer))
                                  .Where(m => m.HasValue)
                                  .Select(m => m.Value)
                                  .OrderByDescending(m => m.PersistenceTime)
                                  .Take(50)
                                  .ToList();

            return(new QueuesModel
            {
                Queues = queueStorage.List(null).Select(queueName => new AzureQueue
                {
                    QueueName = queueName,
                    MessageCount = queueStorage.GetApproximateCount(queueName),
                    Latency = queueStorage.GetApproximateLatency(queueName).Convert(ts => ts.PrettyFormat(), string.Empty),
                    Services = applicationDefinition.Convert(cd => cd.QueueServices.Where(d => d.QueueName == queueName).ToArray(), new QueueServiceDefinition[0])
                }).ToArray(),

                HasQuarantinedMessages = failingMessages.Count > 0,

                Quarantine = failingMessages
                             .GroupBy(m => m.QueueName)
                             .Select(group => new AzureQuarantineQueue
                {
                    QueueName = group.Key,
                    Messages = group.OrderByDescending(m => m.PersistenceTime)
                               .Select(m => new AzureQuarantineMessage
                    {
                        Inserted = (DateTime.UtcNow - m.InsertionTime.UtcDateTime).PrettyFormat() + " ago",
                        Persisted = (DateTime.UtcNow - m.PersistenceTime.UtcDateTime).PrettyFormat() + " ago",
                        Reason = HttpUtility.HtmlEncode(m.Reason),
                        Content = FormatQuarantinedLogEntryXmlContent(m),
                        Key = m.Key,
                        HasData = m.IsDataAvailable,
                        HasXml = m.DataXml.HasValue
                    })
                               .ToArray()
                })
                             .ToArray()
            });
        }
        public void Serialization()
        {
            // overflowing message
            var om = new MessageWrapper {
                ContainerName = "con", BlobName = "blo"
            };

            var stream     = new MemoryStream();
            var serializer = new CloudFormatter();

            serializer.Serialize(om, stream, om.GetType());
            stream.Position = 0;
            var omBis = (MessageWrapper)serializer.Deserialize(stream, typeof(MessageWrapper));

            Assert.AreEqual(om.ContainerName, omBis.ContainerName, "#A00");
            Assert.AreEqual(om.BlobName, omBis.BlobName, "#A01");
        }
        public void SerializeDeserializeAbstractBaseType()
        {
            var baseType  = typeof(MockAbstract);
            var formatter = new CloudFormatter();

            using (var stream = new MemoryStream())
            {
                var test = new MockConcrete()
                {
                    Number = 123, Text = "hello!"
                };
                formatter.Serialize(test, stream, baseType);
                stream.Seek(0, SeekOrigin.Begin);
                var deserialized = (MockConcrete)formatter.Deserialize(stream, baseType);
                Assert.AreEqual(test.Text, deserialized.Text);
                Assert.AreEqual(test.Number, deserialized.Number);
            }
        }
예제 #9
0
		static IQueueStorageProvider QueueStorageProvider(IContext c)
		{
			IDataSerializer formatter;
			if (!c.TryResolve(out formatter))
			{
				formatter = new CloudFormatter();
			}

			return new QueueStorageProvider(
				c.Resolve<CloudQueueClient>(),
				c.Resolve<IBlobStorageProvider>(),
				formatter,
				// RuntimeFinalizer is a dependency (as the name suggest) on the worker runtime
				// This dependency is typically not available in a pure O/C mapper scenario.
				// In such case, we just pass a dummy finalizer (that won't be used any
				c.ResolveOptional<IRuntimeFinalizer>());
		}
        public void SerializeDeserialize()
        {
            var formatter = new CloudFormatter();

            using (var stream = new MemoryStream())
            {
                var test = "hello!";
                formatter.Serialize(test, stream, typeof(string));
                stream.Seek(0, SeekOrigin.Begin);
                Assert.AreEqual(test, formatter.Deserialize(stream, typeof(string)));
                //Console.WriteLine(stream.CanSeek);
            }

            using (var stream = new MemoryStream())
            {
                var test = 123;
                formatter.Serialize(test, stream, typeof(int));
                stream.Seek(0, SeekOrigin.Begin);
                Assert.AreEqual(test, formatter.Deserialize(stream, typeof(int)));
            }

            using (var stream = new MemoryStream())
            {
                var test = new byte[] { 1, 2, 3 };
                formatter.Serialize(test, stream, typeof(int));
                stream.Seek(0, SeekOrigin.Begin);
                CollectionAssert.AreEquivalent(test, (byte[])formatter.Deserialize(stream, typeof(byte[])));
            }

            using (var stream = new MemoryStream())
            {
                var items = new MockComplex[3];

                items[0] = new MockComplex
                {
                    Prop1 = "0",
                    Prop2 = 0,
                    Flags = new List <MockEnum> {
                        MockEnum.Item1
                    },
                    Ignored   = "hi!",
                    InvoiceId = "700",
                    Field     = 0.0F
                };

                items[1] = new MockComplex
                {
                    Prop1 = "1",
                    Prop2 = 1,
                    Flags = new List <MockEnum> {
                        MockEnum.Item2
                    },
                    Ignored   = "hi!",
                    InvoiceId = "800",
                    Field     = 1.0F
                };

                items[2] = new MockComplex
                {
                    Prop1 = "2",
                    Prop2 = 2,
                    Flags = new List <MockEnum> {
                        MockEnum.Item3, MockEnum.Item1
                    },
                    Ignored = "hi!",
                    Field   = 2.0F
                };

                formatter.Serialize(items, stream, items.GetType());
                stream.Seek(0, SeekOrigin.Begin);

                var output = (MockComplex[])formatter.Deserialize(stream, typeof(MockComplex[]));

                Assert.AreEqual(items.Length, output.Length);
                for (int i = 0; i < items.Length; i++)
                {
                    Assert.AreEqual(items[i].Field, output[i].Field);
                    Assert.AreEqual(items[i].Prop1, output[i].Prop1);
                    Assert.AreEqual(items[i].Prop2, output[i].Prop2);
                    CollectionAssert.AreEquivalent(items[i].Flags, output[i].Flags);
                    Assert.IsNull(output[i].Ignored);
                    Assert.AreEqual(items[i].InvoiceId, output[i].InvoiceId);
                }
            }

            using (var stream = new MemoryStream())
            {
                var item = new MockComplex2
                {
                    Prop1 = "0",
                    Prop2 = 0,
                    Flags = new List <MockEnum> {
                        MockEnum.Item1
                    },
                };

                formatter.Serialize(item, stream, item.GetType());
                stream.Seek(0, SeekOrigin.Begin);

                var output = (MockComplex2)formatter.Deserialize(stream, typeof(MockComplex2));

                Assert.AreEqual(item.Prop1, output.Prop1);
                Assert.AreEqual(item.Prop2, output.Prop2);
                Assert.AreEqual(item.Flags.Count, output.Flags.Count);
            }

            // Test "big" object
            using (var stream = new MemoryStream())
            {
                var hugeArray = new double[10000];
                for (int i = 0; i < hugeArray.Length; i++)
                {
                    hugeArray[i] = i;
                }

                formatter.Serialize(hugeArray, stream, hugeArray.GetType());

                stream.Seek(0, SeekOrigin.Begin);
                var output = (double[])formatter.Deserialize(stream, typeof(double[]));

                CollectionAssert.AreEquivalent(hugeArray, output);
            }
        }
        public void UnpackRepack()
        {
            var formatter = new CloudFormatter();

            // STRING
            foreach (var result in ApplyUnpackRepackXml(formatter, "test!"))
            {
                Assert.AreEqual("test!", result, "string");
            }

            // INTEGER
            foreach (var result in ApplyUnpackRepackXml(formatter, 123))
            {
                Assert.AreEqual(123, result, "integer");
            }

            // BYTE ARRAY
            var byteArray = new byte[] { 1, 2, 3 };

            foreach (var result in ApplyUnpackRepackXml(formatter, byteArray))
            {
                CollectionAssert.AreEquivalent(byteArray, result, "byte array");
            }

            // COMPLEX DATA
            var complexInput = new[]
            {
                new MockComplex
                {
                    Prop1 = "0",
                    Prop2 = 0,
                    Flags = new List <MockEnum> {
                        MockEnum.Item1
                    },
                    Ignored   = "hi!",
                    InvoiceId = "700",
                    Field     = 0.0F
                },
                new MockComplex
                {
                    Prop1 = "1",
                    Prop2 = 1,
                    Flags = new List <MockEnum> {
                        MockEnum.Item2
                    },
                    Ignored   = "hi!",
                    InvoiceId = "800",
                    Field     = 1.0F
                },
                new MockComplex
                {
                    Prop1 = "2",
                    Prop2 = 2,
                    Flags = new List <MockEnum> {
                        MockEnum.Item3, MockEnum.Item1
                    },
                    Ignored = "hi!",
                    Field   = 2.0F
                }
            };

            foreach (var result in ApplyUnpackRepackXml(formatter, complexInput))
            {
                Assert.AreEqual(complexInput.Length, result.Length);
                for (int i = 0; i < complexInput.Length; i++)
                {
                    Assert.AreEqual(complexInput[i].Field, result[i].Field);
                    Assert.AreEqual(complexInput[i].Prop1, result[i].Prop1);
                    Assert.AreEqual(complexInput[i].Prop2, result[i].Prop2);
                    CollectionAssert.AreEquivalent(complexInput[i].Flags, result[i].Flags);
                    Assert.IsNull(result[i].Ignored);
                    Assert.AreEqual(complexInput[i].InvoiceId, result[i].InvoiceId);
                }
            }

            // SERIALIZABLE INSTEAD OF DATA CONTRACT
            var serializableInput = new MockComplex2
            {
                Prop1 = "0",
                Prop2 = 0,
                Flags = new List <MockEnum> {
                    MockEnum.Item1
                },
            };

            foreach (var result in ApplyUnpackRepackXml(formatter, serializableInput))
            {
                Assert.AreEqual(serializableInput.Prop1, result.Prop1);
                Assert.AreEqual(serializableInput.Prop2, result.Prop2);
                Assert.AreEqual(serializableInput.Flags.Count, result.Flags.Count);
            }

            // UNTYPED DATA
            var unknownInput = new MockWithObject {
                Generic = DateTime.UtcNow.Second > 30 ? (object)100 : "hello"
            };

            foreach (var result in ApplyUnpackRepackXml(formatter, unknownInput))
            {
                Assert.AreEqual(unknownInput.Generic, result.Generic);
            }
        }
 public CachedMyDocumentSet(IBlobStorageProvider blobs)
     : base(blobs, key => new BlobLocation("document-container", key.ToString()))
 {
     _cache     = MemoryCache.Default;
     Serializer = new CloudFormatter();
 }