예제 #1
0
        public static void RunWeakInstance12()
        {
            var instance = new InstanceTest();

            Console.WriteLine(MonoLinkerSupport.IsWeakInstanceOf <Foo> (instance.Instance));
            Console.WriteLine();
        }
예제 #2
0
        public static void RunWeakInstance8()
        {
            var instance = new InstanceTest();

            instance.Run();
            Console.WriteLine(instance.Supported);
            TestHelpers.Assert(!instance.Supported);
        }
예제 #3
0
        public static void InstanceMethodThisHandling()
        {
            var instance = new InstanceTest();

            Assert.Equal("instance", instance.Method());
            Assert.Equal("new InstanceTest()", new InstanceTest().Method());
            Assert.Equal("(instance ?? new InstanceTest())", (instance ?? new InstanceTest()).Method());

            Assert.Equal("", instance.NoThisMethodCaller());
            Assert.Equal("this", instance.ThisMethodCaller());
        }
예제 #4
0
        public static void RunWeakInstance13()
        {
            var instance = new InstanceTest();

            if (MonoLinkerSupport.IsWeakInstanceOf <Foo> (instance.Instance))
            {
                throw new AssertionException("Conditional should return false.");
            }

            Console.Error.WriteLine("DONE");
        }
예제 #5
0
        public static bool RunWeakInstance10()
        {
            var instance = new InstanceTest();

            Console.WriteLine(instance);
            if (TryCatchMethod())
            {
                throw new AssertionException();
            }
            return(MonoLinkerSupport.IsWeakInstanceOf <Foo> (instance.Field));
        }
        public static void RunWeakInstance13()
        {
            var instance = new InstanceTest();

            if (MonoLinkerSupport.IsWeakInstanceOf <Foo> (instance.Instance))
            {
                throw TestHelpers.AssertRemoved();
            }

            Console.Error.WriteLine("DONE");
        }
예제 #7
0
 public void CallInstance() => InstanceTest?.Invoke();
        public async Task Run(CancellationToken cancellationToken)
        {
            var firstTest = await CreateTestInstance(cancellationToken).ConfigureAwait(false);

            //instances always start offline
            Assert.AreEqual(false, firstTest.Online);
            //check it exists
            Assert.IsTrue(Directory.Exists(firstTest.Path));

            //cant create instances in existent directories
            var testNonEmpty = Path.Combine(testRootPath, Guid.NewGuid().ToString());

            Directory.CreateDirectory(testNonEmpty);
            await Assert.ThrowsExceptionAsync <ConflictException>(() => instanceManagerClient.CreateOrAttach(new Api.Models.Instance
            {
                Path = testNonEmpty,
                Name = "NonEmptyTest"
            }, cancellationToken)).ConfigureAwait(false);

            await Assert.ThrowsExceptionAsync <ConflictException>(() => instanceManagerClient.CreateOrAttach(firstTest, cancellationToken)).ConfigureAwait(false);

            //can't create instances in installation directory
            await Assert.ThrowsExceptionAsync <ConflictException>(() => instanceManagerClient.CreateOrAttach(new Api.Models.Instance
            {
                Path = "./A/Local/Path",
                Name = "NoInstallDirTest"
            }, cancellationToken)).ConfigureAwait(false);

            //can't move to existent directories
            await Assert.ThrowsExceptionAsync <ConflictException>(() => instanceManagerClient.Update(new Api.Models.Instance
            {
                Id   = firstTest.Id,
                Path = testNonEmpty
            }, cancellationToken)).ConfigureAwait(false);

            //test basic move
            Directory.Delete(testNonEmpty);
            var initialPath = firstTest.Path;

            firstTest = await instanceManagerClient.Update(new Api.Models.Instance
            {
                Id   = firstTest.Id,
                Path = testNonEmpty
            }, cancellationToken).ConfigureAwait(false);

            Assert.IsNotNull(firstTest.MoveJob);

            do
            {
                firstTest = await instanceManagerClient.GetId(firstTest, cancellationToken).ConfigureAwait(false);

                await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken).ConfigureAwait(false);
            } while (firstTest.MoveJob != null);


            //online it for real for component tests
            firstTest.Online            = true;
            firstTest.ConfigurationType = ConfigurationType.HostWrite;
            firstTest = await instanceManagerClient.Update(firstTest, cancellationToken).ConfigureAwait(false);

            Assert.AreEqual(true, firstTest.Online);
            Assert.AreEqual(ConfigurationType.HostWrite, firstTest.ConfigurationType);

            //can't move online instance
            await Assert.ThrowsExceptionAsync <ConflictException>(() => instanceManagerClient.Update(new Api.Models.Instance
            {
                Id   = firstTest.Id,
                Path = initialPath
            }, cancellationToken)).ConfigureAwait(false);

            var testSuite1 = new InstanceTest(instanceManagerClient.CreateClient(firstTest));
            await testSuite1.RunTests(cancellationToken).ConfigureAwait(false);

            //can regain permissions on instance without instance user
            var instanceClient  = instanceManagerClient.CreateClient(firstTest);
            var ourInstanceUser = await instanceClient.Users.Read(cancellationToken).ConfigureAwait(false);

            await instanceClient.Users.Delete(ourInstanceUser, cancellationToken).ConfigureAwait(false);

            await Assert.ThrowsExceptionAsync <InsufficientPermissionsException>(() => instanceClient.Users.Read(cancellationToken)).ConfigureAwait(false);

            await instanceManagerClient.Update(new Api.Models.Instance
            {
                Id = firstTest.Id
            }, cancellationToken).ConfigureAwait(false);

            ourInstanceUser = await instanceClient.Users.Read(cancellationToken).ConfigureAwait(false);

            //can't detach online instance
            await Assert.ThrowsExceptionAsync <ConflictException>(() => instanceManagerClient.Detach(firstTest, cancellationToken)).ConfigureAwait(false);

            firstTest.Online = false;
            firstTest        = await instanceManagerClient.Update(firstTest, cancellationToken).ConfigureAwait(false);

            await instanceManagerClient.Detach(firstTest, cancellationToken).ConfigureAwait(false);

            var instanceAttachFileName = (string)typeof(InstanceController).GetField("InstanceAttachFileName", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
            var attachPath             = Path.Combine(firstTest.Path, instanceAttachFileName);

            Assert.IsTrue(File.Exists(attachPath));

            //can recreate detached instance
            firstTest = await instanceManagerClient.CreateOrAttach(firstTest, cancellationToken).ConfigureAwait(false);

            //but only if the attach file exists
            await instanceManagerClient.Detach(firstTest, cancellationToken).ConfigureAwait(false);

            File.Delete(attachPath);
            await Assert.ThrowsExceptionAsync <ConflictException>(() => instanceManagerClient.CreateOrAttach(firstTest, cancellationToken)).ConfigureAwait(false);
        }