Пример #1
0
        public void SetFetchEngineProcedureTest()
        {
            string[] Expected;

            db.TruncateTables();
            DateTime TIME_BEFORE_INSERTING = DateTime.UtcNow;

            Thread.Sleep(time);
            db.SetFetchEngine("Fetch1");
            Thread.Sleep(time);
            DateTime TIME_MIDDLE_INSERTING = DateTime.UtcNow;

            Thread.Sleep(time);
            db.SetFetchEngine("Fetch2");
            Thread.Sleep(time);
            DateTime TIME_AFTER_INSERTING = DateTime.UtcNow;

            Thread.Sleep(time);


            //STEP 1
            var Sources = db.GetFetchEngine(TIME_AFTER_INSERTING).ToArray();

            Expected = new string[]
            {
                "Fetch1",
                "Fetch2"
            };

            Assert.AreEqual(1, Sources.Length);
            foreach (var item in Sources)
            {
                Assert.IsTrue(Expected.Contains(item.FullClrTypeName));
            }

            //STEP 2

            Sources = db.GetFetchEngine(TIME_MIDDLE_INSERTING).ToArray();

            Expected = new string[]
            {
                "Fetch1"
            };

            Assert.AreEqual(1, Sources.Length);
            foreach (var item in Sources)
            {
                Assert.IsTrue(Expected.Contains(item.FullClrTypeName));
            }

            //STEP 3

            Sources = db.GetFetchEngine(TIME_BEFORE_INSERTING).ToArray();

            Expected = new string[] { };

            Assert.AreEqual(0, Sources.Length);
        }
Пример #2
0
        public void Reset(string azureGAC = null)
        {
            // check that engine is among the assemblies
            if (azureGAC == null)
            {
                azureGAC = Path.Combine(Directory.GetCurrentDirectory(), "azureGAC");
            }
            if (!Directory.Exists(azureGAC))
            {
                Console.WriteLine("Error: no such directory: {0}.", azureGAC);
            }
            else
            {
                try
                {
                    Tuple <Assembly, byte[]>[] toLoadtoGAC = GetBaseAssembliesForAzureGac(azureGAC).ToArray();
                    var ee = from a in toLoadtoGAC
                             from t in a.Item1.GetTypes()
                             where t.GetInterfaces().Any(i => i.Name == "IFetchEngine")
                             select t.AssemblyQualifiedName;
                    var engines = ee.ToArray();
                    if (engines.Length < 1)
                    {
                        Console.WriteLine("Error: {0} assemblies to load in AzureGAC and none of them contains IFetchEngine.", toLoadtoGAC.Length);
                    }
                    else if (engines.Length > 1)
                    {
                        Console.WriteLine("Error: multiple engines found:\n{0}", string.Join("\n", engines));
                    }
                    else
                    {
                        Console.WriteLine("Engine found: {0}", engines[0]);
                        db.TruncateTables();
                        if (isConnectedToCloud)
                        {
                            astore.Reset();

                            foreach (Tuple <Assembly, byte[]> toLoad in toLoadtoGAC)
                            {
                                astore.Install(toLoad.Item1);
                            }

                            //clearing requests container
                            var csa                = CloudStorageAccount.Parse(storageConnectionString);
                            var client             = csa.CreateCloudBlobClient();
                            var requestsContatiner = client.GetContainerReference("requests");
                            requestsContatiner.CreateIfNotExist();
                            Parallel.ForEach(requestsContatiner.ListBlobs(), x =>
                            {
                                try
                                {
                                    ((CloudBlob)x).Delete();
                                }
                                catch (StorageClientException sce)
                                {
                                    if (sce.ErrorCode != StorageErrorCode.BlobNotFound)
                                    {
                                        return;
                                    }
                                }
                            });
                        }
                        db.SetFetchEngine(string.Format(engines[0]));
                    }
                }
                catch (System.Reflection.ReflectionTypeLoadException e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine(string.Join <Exception>("\n", e.LoaderExceptions));
                }
            }
        }