Exemplo n.º 1
0
        /// <summary>
        /// note: this does not call services
        /// </summary>
        private void TestCreateNewAccount()
        {
            XmlDocument getUserServiceXmlResponse         = new XmlDocument();
            string      newUserResponseFromGetUserService = "<Accounts></Accounts>";

            getUserServiceXmlResponse.LoadXml(newUserResponseFromGetUserService);

            XmlDocument createUserServiceXmlResponse         = new XmlDocument();
            string      newUserResponseFromCreateUserService = "<Accounts> <Account AccountId=\"1\" FBAccountId=\"12345\" PIAccountId=\"123\" PISecureKey=\"gagaga\" NickName=\"mein schmeer\" FirstName=\"samir\" LastName=\"awesome\"/> </Accounts>";

            createUserServiceXmlResponse.LoadXml(newUserResponseFromCreateUserService);

            ServerStateMachine serverStateMachine = new TestServerStateMachine();
            TestUsersManager   userManager        = new TestUsersManager(serverStateMachine, getUserServiceXmlResponse, createUserServiceXmlResponse);

            // create a writer and open the file
            System.IO.TextWriter tw = new System.IO.StreamWriter("C:/TestCreateNewAccountLoadTest10000Users.txt");

            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();

            int numberOfAccountsToCreate = 100;

            for (int i = 0; i < numberOfAccountsToCreate; ++i)
            {
                CreateNewAccount(userManager, i, tw);
            }

            stopWatch.Stop();
            tw.WriteLine("Total time it took to create " + numberOfAccountsToCreate + " of users: " + stopWatch.Elapsed.ToString());

            // close the stream
            tw.Close();
        }
        // Get an object update but the object is not in the repository
        public void ReceiveMessageForMissingObject()
        {
            ServerStateMachine     serverStateMachine = new TestServerStateMachine();
            ServerObjectRepository objectRepo         = new ServerObjectRepository(serverStateMachine);

            DistributedObjectId doId = new DistributedObjectId(100);

            Message       updateMessage = new Message();
            List <object> data          = new List <object>();

            data.Add("Test");
            updateMessage.UpdateObjectMessage(true, false, doId, (int)MessageSubType.Chat, data);

            objectRepo.ReceiveRequest(updateMessage, Guid.Empty);
        }
        public void ZoneHandling()
        {
            ServerStateMachine     serverStateMachine = new TestServerStateMachine();
            ServerObjectRepository objRepo            = new ServerObjectRepository(serverStateMachine);

            // Create a distributed object to play with
            DistributedObjectId   doId = new DistributedObjectId(100);
            DistributedTestObject obj  = new DistributedTestObject(doId);

            ZoneId zoneId1 = new ZoneId(100);
            ZoneId zoneId2 = new ZoneId(200);

            objRepo.AddObject(obj);

            // No zone set yet
            Assert.IsTrue(objRepo.GetZone(obj) == null);
            Assert.IsTrue(objRepo.GetZone(doId) == null);
            Assert.IsTrue(objRepo.GetObjectsInZone(zoneId1).Count == 0);

            // Set the first zone
            objRepo.SetObjectZone(obj, zoneId1);
            Assert.IsTrue(objRepo.GetZone(obj) == zoneId1);
            Assert.IsTrue(objRepo.GetZone(doId) == zoneId1);
            Assert.IsTrue(objRepo.GetObjectsInZone(zoneId1).Count == 1);

            // Now change to the second zone
            objRepo.SetObjectZone(obj, zoneId2);
            Assert.IsTrue(objRepo.GetZone(obj) == zoneId2);
            Assert.IsTrue(objRepo.GetZone(doId) == zoneId2);
            // Should no longer be in the first zone
            Assert.IsTrue(objRepo.GetObjectsInZone(zoneId1).Count == 0);
            // Should be in the second zone
            Assert.IsTrue(objRepo.GetObjectsInZone(zoneId2).Count == 1);

            // Try setting the same zone again
            objRepo.SetObjectZone(obj, zoneId2);
            Assert.IsTrue(objRepo.GetZone(obj) == zoneId2);
            Assert.IsTrue(objRepo.GetZone(doId) == zoneId2);
            // Should be in the second zone, only once
            Assert.IsTrue(objRepo.GetObjectsInZone(zoneId2).Count == 1);

            // Remove obj
            objRepo.RemoveObject(obj);
            Assert.IsFalse(objRepo.ContainsObject(obj));
            // Should not be in either zone
            Assert.IsTrue(objRepo.GetObjectsInZone(zoneId1).Count == 0);
            Assert.IsTrue(objRepo.GetObjectsInZone(zoneId2).Count == 0);
        }
Exemplo n.º 4
0
        public void SessionInterestOpenAndClose()
        {
            // Setup the server engine and its required dependencies
            ServerStateMachine     serverStateMachine = new TestServerStateMachine();
            SessionManager         sessionManager     = new SessionManager();
            ServerObjectRepository objectRepo         = new ServerObjectRepository(serverStateMachine);
            ServerEngine           serverEngine       = new ServerEngine(sessionManager, objectRepo, MockSendMessageToReflector);

            Guid sessionId1 = new Guid();

            ZoneId zoneId1 = new ZoneId(100);
            ZoneId zoneId2 = new ZoneId(200);
            ZoneId zoneId3 = new ZoneId(300);

            // Simple open and close interest
            // Tests interest changing in an empty zone
            serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId1);
            Assert.IsTrue(sessionManager.SessionIdHasInterest(sessionId1, zoneId1));
            serverEngine.ProcessCloseZoneInterest(sessionId1, zoneId1);
            Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId1));

            // Now test interest in two zones at once
            serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId1);
            serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId2);
            Assert.IsTrue(sessionManager.SessionIdHasInterest(sessionId1, zoneId1));
            Assert.IsTrue(sessionManager.SessionIdHasInterest(sessionId1, zoneId2));

            // Now close them as a list
            List <ZoneId> zoneIds = new List <ZoneId>();

            zoneIds.Add(zoneId1);
            zoneIds.Add(zoneId2);
            serverEngine.ProcessCloseZoneInterest(sessionId1, zoneIds);
            Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId1));
            Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId2));

            // Open the same interest twice
            serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId1);
            serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId1);
            Assert.IsTrue(sessionManager.SessionIdHasInterest(sessionId1, zoneId1));
            // Close it
            serverEngine.ProcessCloseZoneInterest(sessionId1, zoneId1);
            Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId1));

            // Close interest in a zone you didn't have interest in already
            serverEngine.ProcessCloseZoneInterest(sessionId1, zoneId3);
            Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId3));
        }
Exemplo n.º 5
0
        public void ObjectZoneChangingWithNobodyListening()
        {
            // Setup the server engine and its required dependencies
            ServerStateMachine     serverStateMachine = new TestServerStateMachine();
            SessionManager         sessionManager     = new SessionManager();
            ServerObjectRepository objectRepo         = new ServerObjectRepository(serverStateMachine);
            ServerEngine           serverEngine       = new ServerEngine(sessionManager, objectRepo, MockSendMessageToReflector);

            // Create a distributed object to play with
            DistributedObjectId   doId = new DistributedObjectId(100);
            DistributedTestObject obj  = new DistributedTestObject(doId);

            ZoneId zoneId1 = new ZoneId(100);
            ZoneId zoneId2 = new ZoneId(200);

            // Start by putting the object in the first zone
            serverEngine.ProcessZoneChange(obj, zoneId1);
            Assert.IsTrue(objectRepo.GetZone(obj) == zoneId1);

            // Test changing to the zone the object is already in
            serverEngine.ProcessZoneChange(obj, zoneId1);
            Assert.IsTrue(objectRepo.GetZone(obj) == zoneId1);

            // Now change to a new zone
            serverEngine.ProcessZoneChange(obj, zoneId2);
            Assert.IsTrue(objectRepo.GetZone(obj) == zoneId2);

            // Now remove the object from the zone
            Assert.IsTrue(serverEngine.RemoveObjectFromZone(obj) == zoneId2);
            Assert.IsTrue(objectRepo.GetZone(obj) == null);

            // Try a duplicate removal - should be safe to do
            Assert.IsTrue(serverEngine.RemoveObjectFromZone(obj) == null);
            Assert.IsTrue(objectRepo.GetZone(obj) == null);

            // Now put the object back in the first zone
            serverEngine.ProcessZoneChange(obj, zoneId1);
            Assert.IsTrue(objectRepo.GetZone(obj) == zoneId1);
        }
Exemplo n.º 6
0
        public void DisconnectSession()
        {
            // Setup the server engine and its required dependencies
            ServerStateMachine     serverStateMachine = new TestServerStateMachine();
            SessionManager         sessionManager     = new SessionManager();
            ServerObjectRepository objectRepo         = new ServerObjectRepository(serverStateMachine);
            ServerEngine           serverEngine       = new ServerEngine(sessionManager, objectRepo, MockSendMessageToReflector);

            // Create a distributed object to play with
            DistributedObjectId   doId = new DistributedObjectId(100);
            DistributedTestObject obj  = new DistributedTestObject(doId);

            ZoneId zoneId    = new ZoneId(200);
            Guid   sessionId = new Guid();

            Assert.IsTrue(sessionManager.AddSession(sessionId, new ServerAccount(new AccountId(0), 0, "0", "0", "schmear", "mein", "schmeer", null)));
            objectRepo.AddObjectToSessionId(sessionId, obj);

            serverEngine.ProcessOpenZoneInterest(sessionId, zoneId);
            serverEngine.ProcessZoneChange(obj, zoneId);

            serverEngine.ProcessDisconnectSession(sessionId);

            // See if the object repo got cleaned up
            // Object repo should no longer have the object
            Assert.IsFalse(objectRepo.ContainsObject(obj));
            Assert.IsTrue(objectRepo.GetObject(doId) == null);
            // Object should not be in the zone
            Assert.IsFalse(objectRepo.GetObjectsInZone(zoneId).Contains(obj));
            Assert.IsTrue(objectRepo.GetDistributedObjectIdsOwnedBySessionId(sessionId).Count == 0);

            // See if the session manager got cleaned up
            // Session manager should no longer have the session
            Assert.IsFalse(sessionManager.ContainsSession(sessionId));
            // Zone interest should be cleaned up
            Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId, zoneId));
            Assert.IsFalse(sessionManager.GetSessionIdsInterestedInZoneId(zoneId).Contains(sessionId));
            Assert.IsFalse(sessionManager.GetZoneIdsFromInterestedSessionId(sessionId).Contains(zoneId));
        }
Exemplo n.º 7
0
        public void GetAccountForUserTest()
        {
            XmlDocument getUserServiceXmlResponse         = new XmlDocument();
            string      newUserResponseFromGetUserService = "<Accounts></Accounts>";

            getUserServiceXmlResponse.LoadXml(newUserResponseFromGetUserService);

            XmlDocument createUserServiceXmlResponse         = new XmlDocument();
            string      newUserResponseFromCreateUserService = "<Accounts> <Account AccountId=\"1\" FBAccountId=\"12345\" PIAccountId=\"123\" PISecureKey=\"gagaga\" NickName=\"mein schmeer\" FirstName=\"samir\" LastName=\"awesome\"/> </Accounts>";

            createUserServiceXmlResponse.LoadXml(newUserResponseFromCreateUserService);

            ServerAccount      createUserServiceServerAccount = new ServerAccount(new AccountId(1), (long)12345, string.Empty, string.Empty, "mein schmeer", "samir", "awesome", null);
            ServerStateMachine serverStateMachine             = new TestServerStateMachine();
            TestUsersManager   userManager = new TestUsersManager(serverStateMachine, getUserServiceXmlResponse, createUserServiceXmlResponse);

            userManager.GetAccountForUser("12345", "qwerty", "mein schmeer", "samir", "awesome", "123.456.7.890", "MockCampaign", "MockFacebookReferredId", delegate(ServerAccount serverAccount)
            {
                Assert.IsTrue(serverAccount.Nickname == "mein schmeer", "NickName does not match");
                Assert.IsTrue(serverAccount.FacebookAccountId.ToString() == "12345", "FacebookAccountId does not match");
            });
        }