Esempio n. 1
0
        public void AppPackageFolder_Remove()
        {
            DeleteAll();

            CreatePackage(new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4"));
            CreatePackage(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"));

            using (var folder = new AppPackageFolder(this, tempFolder))
            {
                AppPackageInfo[] infoArr;

                infoArr = folder.GetPackages();
                Assert.AreEqual(2, infoArr.Length);

                Assert.IsNotNull(FindFile(infoArr, "myapps.test1-0001.0002.0003.0004.zip"));
                Assert.IsNotNull(FindFile(infoArr, "myapps.test2-0005.0006.0007.0008.zip"));

                folder.Remove(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"));

                infoArr = folder.GetPackages();
                Assert.AreEqual(1, infoArr.Length);

                Assert.IsNotNull(FindFile(infoArr, "myapps.test1-0001.0002.0003.0004.zip"));
                Assert.IsNull(FindFile(infoArr, "myapps.test2-0005.0006.0007.0008.zip"));
            }
        }
Esempio n. 2
0
        public void AppPackageFolder_Detect_Delete()
        {
            DeleteAll();

            CreatePackage(new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4"));
            CreatePackage(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"));

            using (var folder = new AppPackageFolder(this, tempFolder))
            {
                AppPackageInfo[] infoArr;
                AppPackageInfo   info;
                int    size;
                byte[] md5;

                infoArr = folder.GetPackages();
                Assert.AreEqual(2, infoArr.Length);

                info = FindFile(infoArr, "myapps.test1-0001.0002.0003.0004.zip");
                Assert.IsNotNull(info);
                Assert.AreEqual("myapps.test1-0001.0002.0003.0004.zip", info.FileName);
                Assert.AreEqual(tempFolder + "\\myapps.test1-0001.0002.0003.0004.zip", info.FullPath);
                Assert.AreEqual(new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4"), info.AppRef);
                GetFileInfo(info.FileName, out size, out md5);
                Assert.AreEqual(size, info.Size);
                CollectionAssert.AreEqual(md5, info.MD5);

                info = FindFile(infoArr, "myapps.test2-0005.0006.0007.0008.zip");
                Assert.IsNotNull(info);
                Assert.AreEqual("myapps.test2-0005.0006.0007.0008.zip", info.FileName);
                Assert.AreEqual(tempFolder + "\\myapps.test2-0005.0006.0007.0008.zip", info.FullPath);
                Assert.AreEqual(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"), info.AppRef);
                GetFileInfo(info.FileName, out size, out md5);
                Assert.AreEqual(size, info.Size);
                CollectionAssert.AreEqual(md5, info.MD5);

                Thread.Sleep(changeDetectTime);
                Delete("myapps.test1-0001.0002.0003.0004.zip");
                Thread.Sleep(changeDetectTime);

                infoArr = folder.GetPackages();
                Assert.AreEqual(1, infoArr.Length);

                info = FindFile(infoArr, "myapps.test2-0005.0006.0007.0008.zip");
                Assert.IsNotNull(info);
                Assert.AreEqual("myapps.test2-0005.0006.0007.0008.zip", info.FileName);
                Assert.AreEqual(tempFolder + "\\myapps.test2-0005.0006.0007.0008.zip", info.FullPath);
                Assert.AreEqual(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"), info.AppRef);
                GetFileInfo(info.FileName, out size, out md5);
                Assert.AreEqual(size, info.Size);
                CollectionAssert.AreEqual(md5, info.MD5);

                Delete(info.FileName);
                Thread.Sleep(changeDetectTime);
                Assert.AreEqual(0, folder.GetPackages().Length);
            }
        }
Esempio n. 3
0
        public void AppPackageFolder_Scan_Empty()
        {
            DeleteAll();

            using (var folder = new AppPackageFolder(this, tempFolder))
            {
                Assert.AreEqual(0, folder.GetPackages().Length);
                folder.Scan();
                Assert.AreEqual(0, folder.GetPackages().Length);
            }
        }
Esempio n. 4
0
        public void AppPackageFolder_Transit()
        {
            DeleteAll();

            using (var folder = new AppPackageFolder(this, tempFolder))
            {
                AppRef           appRef;
                AppPackageInfo[] infoArr;
                AppPackageInfo   info;
                string           path;
                int    size;
                byte[] md5;

                Assert.AreEqual(0, folder.GetPackages().Length);

                appRef = new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4");
                path   = folder.BeginTransit(appRef);
                CreatePackageAt(path, appRef);

                Assert.AreEqual(0, folder.GetPackages().Length);
                folder.Scan();
                infoArr = folder.GetPackages();
                Assert.AreEqual(0, folder.GetPackages().Length);

                folder.EndTransit(path, true);

                infoArr = folder.GetPackages();
                Assert.AreEqual(1, infoArr.Length);

                info = FindFile(infoArr, "myapps.test1-0001.0002.0003.0004.zip");
                Assert.IsNotNull(infoArr);
                Assert.AreEqual("myapps.test1-0001.0002.0003.0004.zip", info.FileName);
                Assert.AreEqual(tempFolder + "\\myapps.test1-0001.0002.0003.0004.zip", info.FullPath);
                Assert.AreEqual(new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4"), info.AppRef);
                GetFileInfo(info.FileName, out size, out md5);
                Assert.AreEqual(size, info.Size);
                CollectionAssert.AreEqual(md5, info.MD5);

                // Try to overwrite an existing package

                appRef = new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4");
                path   = folder.BeginTransit(appRef);
                CreatePackageAt(path, appRef);
                folder.EndTransit(path, true);

                // Try cancelling a commit

                appRef = new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8");
                path   = folder.BeginTransit(appRef);
                CreatePackageAt(path, appRef);
                folder.EndTransit(path, false);

                Assert.IsFalse(File.Exists(path));

                Assert.IsNull(FindFile(folder.GetPackages(), "myapps.test2-0005.0006.0007.0008.zip"));
                folder.Scan();
                Assert.IsNull(FindFile(folder.GetPackages(), "myapps.test2-0005.0006.0007.0008.zip"));
            }
        }
Esempio n. 5
0
        public void AppPackageFolder_Detect_Change()
        {
            DeleteAll();

            CreatePackage(new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4"));
            CreatePackage(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"));

            using (var folder = new AppPackageFolder(this, tempFolder))
            {
                AppPackageInfo[] infoArr;
                AppPackageInfo   info;
                int    size;
                byte[] md5;

                Thread.Sleep(2000);
                using (var fs = new FileStream(tempFolder + "\\myapps.test1-0001.0002.0003.0004.zip", FileMode.Open, FileAccess.ReadWrite))
                {
                    byte b;

                    b           = (byte)fs.ReadByte();
                    fs.Position = 0;
                    fs.WriteByte((byte)~b);
                    fs.Position = 0;
                    fs.WriteByte(b);
                }

                Thread.Sleep(changeDetectTime);

                infoArr = folder.GetPackages();
                Assert.AreEqual(2, infoArr.Length);

                info = FindFile(infoArr, "myapps.test1-0001.0002.0003.0004.zip");
                Assert.IsNotNull(info);
                Assert.AreEqual("myapps.test1-0001.0002.0003.0004.zip", info.FileName);
                Assert.AreEqual(tempFolder + "\\myapps.test1-0001.0002.0003.0004.zip", info.FullPath);
                Assert.AreEqual(new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4"), info.AppRef);
                GetFileInfo(info.FileName, out size, out md5);
                Assert.AreEqual(size, info.Size);
                CollectionAssert.AreEqual(md5, info.MD5);

                info = FindFile(infoArr, "myapps.test2-0005.0006.0007.0008.zip");
                Assert.IsNotNull(info);
                Assert.AreEqual("myapps.test2-0005.0006.0007.0008.zip", info.FileName);
                Assert.AreEqual(tempFolder + "\\myapps.test2-0005.0006.0007.0008.zip", info.FullPath);
                Assert.AreEqual(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"), info.AppRef);
                GetFileInfo(info.FileName, out size, out md5);
                Assert.AreEqual(size, info.Size);
                CollectionAssert.AreEqual(md5, info.MD5);
            }
        }
Esempio n. 6
0
        public void AppPackageFolder_Scan_IgnoreBad()
        {
            DeleteAll();

            CreatePackage(new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4"));
            CreatePackage(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"));

            using (var fs = new FileStream(tempFolder + "\\BadFile.zip", FileMode.Create, FileAccess.ReadWrite))
            {
                fs.WriteByte(10);
            }

            using (var folder = new AppPackageFolder(this, tempFolder))
            {
                AppPackageInfo[] infoArr;
                AppPackageInfo   info;
                int    size;
                byte[] md5;

                infoArr = folder.GetPackages();
                Assert.AreEqual(2, infoArr.Length);

                info = FindFile(infoArr, "myapps.test1-0001.0002.0003.0004.zip");
                Assert.IsNotNull(info);
                Assert.AreEqual("myapps.test1-0001.0002.0003.0004.zip", info.FileName);
                Assert.AreEqual(tempFolder + "\\myapps.test1-0001.0002.0003.0004.zip", info.FullPath);
                Assert.AreEqual(new AppRef("appref://MyApps/Test1.zip?version=1.2.3.4"), info.AppRef);
                GetFileInfo(info.FileName, out size, out md5);
                Assert.AreEqual(size, info.Size);
                CollectionAssert.AreEqual(md5, info.MD5);

                info = FindFile(infoArr, "myapps.test2-0005.0006.0007.0008.zip");
                Assert.IsNotNull(info);
                Assert.AreEqual("myapps.test2-0005.0006.0007.0008.zip", info.FileName);
                Assert.AreEqual(tempFolder + "\\myapps.test2-0005.0006.0007.0008.zip", info.FullPath);
                Assert.AreEqual(new AppRef("appref://MyApps/Test2.zip?version=5.6.7.8"), info.AppRef);
                GetFileInfo(info.FileName, out size, out md5);
                Assert.AreEqual(size, info.Size);
                CollectionAssert.AreEqual(md5, info.MD5);
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Synchronizes the set of application packages held by this instance with
        /// the primary application store.
        /// </summary>
        private void SyncWithPrimary()
        {
            MsgEP primaryEP;

            if (mode == AppStoreMode.Primary)
            {
                return;     // This is the primary instance
            }
            primaryEP = this.PrimaryEP;
            if (primaryEP == null)
            {
                return;     // There is no known primary
            }
            // Synchronize

            Dictionary <AppRef, AppPackageInfo> primaryPackages;
            Dictionary <AppRef, AppPackageInfo> localPackages;

            primaryPackages = new Dictionary <AppRef, AppPackageInfo>();
            foreach (AppPackageInfo info in ListRemotePackages(primaryEP))
            {
                primaryPackages.Add(info.AppRef, info);
            }

            localPackages = new Dictionary <AppRef, AppPackageInfo>();
            foreach (AppPackageInfo info in packageFolder.GetPackages())
            {
                localPackages.Add(info.AppRef, info);
            }

            // Delete any packages present in the local folder that
            // are not present on the primary.

            foreach (AppPackageInfo info in localPackages.Values)
            {
                if (!primaryPackages.ContainsKey(info.AppRef))
                {
                    packageFolder.Remove(info.AppRef);
                }
            }

            // Download any packages found on the primary that are
            // not present locally or whose MD5 hash differs from
            // the local file.

            foreach (AppPackageInfo info in primaryPackages.Values)
            {
                bool           downloadPackage = false;
                AppPackageInfo localInfo;

                if (!localPackages.TryGetValue(info.AppRef, out localInfo))
                {
                    downloadPackage = true;
                }
                else
                {
                    downloadPackage = !Helper.ArrayEquals(info.MD5, localInfo.MD5);
                }

                if (downloadPackage)
                {
                    StreamTransferSession session;
                    string path;

                    path = packageFolder.BeginTransit(info.AppRef);

                    try
                    {
                        session      = StreamTransferSession.ClientDownload(router, primaryEP, path);
                        session.Args = "appref=" + info.AppRef.ToString();
                        session.Transfer();
                        packageFolder.EndTransit(path, true);
                    }
                    catch (Exception e)
                    {
                        packageFolder.EndTransit(path, false);

                        // I'm going to log the exception and then continue
                        // downloading any remaining packages.

                        SysLog.LogException(e);
                    }
                }
            }
        }