public void SaslFactory_WhenSCRAM_SHA1Available_FuncReturnsScramShaMechanism(string mechanismType)
        {
            //arrange
            var connection     = new Mock <IConnection>();
            var connectionPool = new Mock <IConnectionPool>();

            connectionPool.Setup(x => x.Acquire()).Returns(connection.Object);

            var opResult = new Mock <IOperationResult <string> >();

            opResult.Setup(x => x.Success).Returns(true);
            opResult.Setup(x => x.Value).Returns("SCRAM-Sha512 SCRAM-Sha256 SCRAM-SHA1 CRAM-MD5 PLAIN");

            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var service    = new Mock <IIOService>();

            service.Setup(x => x.ConnectionPool).Returns(connectionPool.Object);
            service.Setup(x => x.Execute(It.IsAny <SaslList>(), It.IsAny <IConnection>()))
            .Returns(opResult.Object);

            SaslFactory.Execute = (op, conn) => opResult.Object;

            //act
            var factory   = SaslFactory.GetFactory();
            var mechanism = factory("authenticated", "secret", connectionPool.Object, transcoder);

            //assert
            Assert.IsTrue(mechanism is ScramShaMechanism);
            Assert.AreEqual("SCRAM-SHA1", mechanism.MechanismType);
        }
Esempio n. 2
0
 public DefaultMemcachedConfiguration()
 {
     NodeLocator    = typeof(DefaultNodeLocator);
     KeyTransformer = new Base64KeyTransformer();
     Transcoder     = new DefaultTranscoder();
     Initialize();
 }
        public void SaslFactory_WhenSCRAM_SHA1Available_FuncReturnsScramShaMechanism(string mechanismType)
        {
            //arrange
            var connection = new Mock<IConnection>();
            var connectionPool = new Mock<IConnectionPool>();
            connectionPool.Setup(x => x.Acquire()).Returns(connection.Object);

            var opResult = new Mock<IOperationResult<string>>();
            opResult.Setup(x => x.Success).Returns(true);
            opResult.Setup(x => x.Value).Returns("SCRAM-Sha512 SCRAM-Sha256 SCRAM-SHA1 CRAM-MD5 PLAIN");

            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var service = new Mock<IIOService>();
            service.Setup(x => x.ConnectionPool).Returns(connectionPool.Object);
            service.Setup(x => x.Execute(It.IsAny<SaslList>(), It.IsAny<IConnection>()))
                .Returns(opResult.Object);

            //act
            var factory = SaslFactory.GetFactory();
            var mechanism = factory("authenticated", "secret", service.Object, transcoder);

            //assert
            Assert.IsTrue(mechanism is ScramShaMechanism);
            Assert.AreEqual("SCRAM-SHA1", mechanism.MechanismType);
        }
Esempio n. 4
0
        public void Should_Convert_To_PascalCase_Json_With_Altered_Serialization_Settings()
        {
            var transcoder = new DefaultTranscoder(
                new DefaultSerializer(
                    new JsonSerializerSettings(),
                    new JsonSerializerSettings
            {
                ContractResolver = new DefaultContractResolver()
            }));

            var data = new Pascal
            {
                SomeProperty    = "SOME",
                SomeIntProperty = 12345,
                HasPascalCase   = true
            };
            var expectedJsonBytes = Encoding.UTF8.GetBytes("{\"SomeProperty\":\"SOME\",\"SomeIntProperty\":12345,\"HasPascalCase\":true}");

            using (var jsonBytes = new MemoryStream())
                using (var jsonEncoded = new MemoryStream())
                {
                    transcoder.SerializeAsJson(jsonBytes, data);
                    transcoder.Encode(jsonEncoded, data, TypeCode.Object, OpCode.Get);

                    Assert.Equal(expectedJsonBytes, jsonBytes.ToArray());
                    Assert.Equal(expectedJsonBytes, jsonEncoded.ToArray());
                }
        }
        public void Test_Timed_Execution_Parallel()
        {
            var options = new ParallelOptions {
                MaxDegreeOfParallelism = 4
            };
            var converter  = new DefaultConverter();
            var transcoder = new DefaultTranscoder(converter);
            var vbucket    = GetVBucket();
            var n          = 1000;//set to a higher # if needed

            using (new OperationTimer())
            {
                Parallel.For(0, n, options, i =>
                {
                    var key    = string.Format("key{0}", i);
                    var set    = new Set <int?>(key, i, vbucket, transcoder, OperationLifespanTimeout);
                    var result = IOService.Execute(set);
                    Assert.IsTrue(result.Success);

                    var get     = new Get <int?>(key, vbucket, transcoder, OperationLifespanTimeout);
                    var result1 = IOService.Execute(get);
                    Assert.IsTrue(result1.Success);
                    Assert.AreEqual(i, result1.Value);
                });
            }
        }
        public void Test_Timed_Execution()
        {
            var converter = new DefaultConverter();
            var transcoder = new DefaultTranscoder(converter);
            var vbucket = GetVBucket();
            int n = 1000; //set to a higher # if needed

            using (new OperationTimer())
            {
                var key = string.Format("key{0}", 111);

                for (var i = 0; i < n; i++)
                {
                    var set = new Set<int?>(key, 111, vbucket, transcoder, OperationLifespanTimeout);
                    var get = new Get<int?>(key, vbucket, transcoder, OperationLifespanTimeout);

                    var result = IOService.Execute(set);
                    Assert.IsTrue(result.Success);

                    var result1 = IOService.Execute(get);
                    Assert.IsTrue(result1.Success);
                    Assert.AreEqual(111, result1.Value);
                }
            }
        }
        public void Test_Timed_Execution()
        {
            var converter  = new DefaultConverter();
            var transcoder = new DefaultTranscoder(converter);
            var vbucket    = GetVBucket();
            int n          = 1000; //set to a higher # if needed

            using (new OperationTimer())
            {
                var key = string.Format("key{0}", 111);

                for (var i = 0; i < n; i++)
                {
                    var set = new Set <int?>(key, 111, vbucket, transcoder, OperationLifespanTimeout);
                    var get = new Get <int?>(key, vbucket, transcoder, OperationLifespanTimeout);

                    var result = IOService.Execute(set);
                    Assert.IsTrue(result.Success);

                    var result1 = IOService.Execute(get);
                    Assert.IsTrue(result1.Success);
                    Assert.AreEqual(111, result1.Value);
                }
            }
        }
        public void ScramShaMechanism_WhenServiceIsNullInCtor_ThrowArgumentNullException()
        {
            IIOService service = null;
            var transcoder = new DefaultTranscoder(new DefaultConverter());

            // ReSharper disable once ExpressionIsAlwaysNull
            // ReSharper disable once ObjectCreationAsStatement
            Assert.Throws<ArgumentNullException>(() => new ScramShaMechanism(service, transcoder, MechanismType.ScramSha256));
        }
Esempio n. 9
0
        public void ScramShaMechanism_WhenServiceIsNullInCtor_ThrowArgumentNullException()
        {
            IIOService service    = null;
            var        transcoder = new DefaultTranscoder(new DefaultConverter());

            // ReSharper disable once ExpressionIsAlwaysNull
            // ReSharper disable once ObjectCreationAsStatement
            Assert.Throws <ArgumentNullException>(() => new ScramShaMechanism(service, transcoder, MechanismType.ScramSha256));
        }
        /// <summary>
        /// Send request to server to try and enable server features.
        /// </summary>
        /// <param name="connection">The connection.</param>
        protected void EnableServerFeatures(IConnection connection)
        {
            var features = new List <short>
            {
                (short)ServerFeatures.SubdocXAttributes,
                (short)ServerFeatures.SelectBucket,
                (short)ServerFeatures.XError
            };

            if (ConnectionPool.Configuration.UseEnhancedDurability)
            {
                features.Add((short)ServerFeatures.MutationSeqno);
            }

            if (ConnectionPool.Configuration.ClientConfiguration != null &&
                ConnectionPool.Configuration.ClientConfiguration.OperationTracingEnabled &&
                ConnectionPool.Configuration.ClientConfiguration.OperationTracingServerDurationEnabled)
            {
                features.Add((short)ServerFeatures.ServerDuration);
            }

            var key        = BuildHelloKey(connection.ConnectionId);
            var transcoder = new DefaultTranscoder();
            var result     = Execute(new Hello(key, features.ToArray(), transcoder, 0, 0), connection);

            if (result.Success)
            {
                SupportsEnhancedDurability     = result.Value.Contains((short)ServerFeatures.MutationSeqno);
                SupportsSubdocXAttributes      = result.Value.Contains((short)ServerFeatures.SubdocXAttributes);
                SupportsEnhancedAuthentication = result.Value.Contains((short)ServerFeatures.SelectBucket);
                SupportsKvErrorMap             = result.Value.Contains((short)ServerFeatures.XError);
                ConnectionPool.SupportsEnhancedAuthentication = SupportsEnhancedAuthentication;
                SupportsServerDuration = result.Value.Contains((short)ServerFeatures.ServerDuration);

                Log.Info("SupportsEnhancedDurability={0}", SupportsEnhancedDurability);
                Log.Info("SupportsSubdocXAttributes={0}", SupportsSubdocXAttributes);
                Log.Info("SupportsEnhancedAuthentication={0}", SupportsEnhancedAuthentication);
                Log.Info("SupportsKvErrorMap={0}", SupportsKvErrorMap);
                Log.Info("SupportsServerDuration={0}", SupportsServerDuration);

                if (SupportsKvErrorMap)
                {
                    var errorMapResult = Execute(new GetErrorMap(transcoder, 0), connection);
                    if (!errorMapResult.Success)
                    {
                        throw new Exception("Error retrieving error map. Cluster indicated it was available.");
                    }

                    ErrorMap = errorMapResult.Value;
                }
            }
            else
            {
                LogFailedHelloOperation(result);
            }
        }
        public void ScramShaMechanism_WhenUsernameIsInvalidinCtor_ThrowArgumentNullException(string username)
        {
            var    transcoder = new DefaultTranscoder(new DefaultConverter());
            string password   = null;

            // ReSharper disable once ExpressionIsAlwaysNull
            // ReSharper disable once ObjectCreationAsStatement
            // ReSharper disable once ExpressionIsAlwaysNull
            Assert.Throws <ArgumentNullException>(() => new ScramShaMechanism(transcoder, username, password, MechanismType.ScramSha256));
        }
Esempio n. 12
0
        public void Test_Json_Deserialize_Int()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            int value      = 42;

            var bytes  = transcoder.SerializeAsJson(value);
            var actual = transcoder.DeserializeAsJson <int>(bytes.AsMemory());

            Assert.Equal(value, actual);
        }
        public void Test_Json_Deserialize_Int()
        {
            var transcoder = new DefaultTranscoder(new ManualByteConverter());
            int value      = 42;

            var bytes  = transcoder.SerializeAsJson(value);
            var actual = transcoder.DeserializeAsJson <int>(bytes, 0, bytes.Length);

            Assert.AreEqual(value, actual);
        }
        public void ScramShaMechanism_WhenMechanismIsInavlid_ThrowArgumentOutOfRangeException(string mechanismType)
        {
            ITypeTranscoder transcoder = new DefaultTranscoder(new DefaultConverter());
            string          username   = "******";
            string          password   = "******";

            // ReSharper disable once ExpressionIsAlwaysNull
            // ReSharper disable once ObjectCreationAsStatement
            Assert.Throws <ArgumentOutOfRangeException>(() => new ScramShaMechanism(transcoder, username, password, mechanismType));
        }
        public void Should_Hydrate_Poco_In_PascalCase_Whatever_The_Case_In_Json()
        {
            byte[] jsonData   = Encoding.UTF8.GetBytes("{ \"SomeProperty\": \"SOME\", \"someIntProperty\": 12345, \"haspAscalCASE\": true }");
            var    transcoder = new DefaultTranscoder(new ManualByteConverter());
            var    hydrated   = transcoder.DeserializeAsJson <Pascal>(jsonData, 0, jsonData.Length);

            Assert.AreEqual("SOME", hydrated.SomeProperty);
            Assert.AreEqual(12345, hydrated.SomeIntProperty);
            Assert.AreEqual(true, hydrated.HasPascalCase);
        }
        public void ScramShaMechanism_Authenticate_IsPopulated()
        {
            var    transcoder = new DefaultTranscoder(new DefaultConverter());
            string password   = "******";
            string username   = "******";

            var mech = new ScramShaMechanism(transcoder, username, password, MechanismType.ScramSha256);

            Assert.That(() => !string.IsNullOrEmpty(mech.ClientNonce));
        }
        public void ScramShaMechanism_WhenUsernameIsInvalidinCtor_ThrowArgumentNullException(string username)
        {
            var service = new Mock<IIOService>().Object;
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            string password = null;

            // ReSharper disable once ExpressionIsAlwaysNull
            // ReSharper disable once ObjectCreationAsStatement
            // ReSharper disable once ExpressionIsAlwaysNull
            Assert.Throws<ArgumentNullException>(() => new ScramShaMechanism(service, transcoder, username, password, MechanismType.ScramSha256));
        }
Esempio n. 18
0
        public void DecodeString_Returns_String_When_Buffer_Is_Empty_And_Type_Is_String()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter(), new DefaultSerializer());

            var bytes  = new byte[0];
            var result = transcoder.Decode <string>(bytes.AsMemory(),
                                                    new Flags {
                DataFormat = DataFormat.String
            },
                                                    OpCode.NoOp);

            Assert.Null(result);
        }
        public void Sets_Expiration_Value_In_Extras()
        {
            const uint expiration = 10;
            var        transcoder = new DefaultTranscoder();
            var        operation  = new GetL <dynamic>("key", null, transcoder, 0)
            {
                Expiration = expiration
            };

            var bytes = operation.Write();

            Assert.AreEqual(expiration, transcoder.Converter.ToUInt32(bytes, 24));
        }
Esempio n. 20
0
        public void Key_Is_Sent_In_Packet()
        {
            const string key        = "test-key";
            var          transcoder = new DefaultTranscoder();

            var hello = new Hello(key, new short[0], transcoder, 0, 0);
            var bytes = hello.Write();

            // key comes after header (24 bytes) and will be 8 bytes long
            var helloKey = transcoder.Converter.ToString(bytes, 24, 8);

            Assert.AreEqual(key, helloKey);
        }
Esempio n. 21
0
        public void Test_Json_Deserialize_Int()
        {
            var transcoder = new DefaultTranscoder();
            int value      = 42;

            using (var stream = new MemoryStream())
            {
                transcoder.SerializeAsJson(stream, value);
                var actual = transcoder.DeserializeAsJson <int>(stream.ToArray());

                Assert.Equal(value, actual);
            }
        }
Esempio n. 22
0
        public void DecodeString_Defaults_To_Null_When_Buffer_Is_Empty_And_Type_Is_JSON()
        {
            var transcoder = new DefaultTranscoder(new DefaultSerializer());

            var bytes  = new byte[0];
            var result = transcoder.Decode <string>(bytes.AsMemory(),
                                                    new Flags {
                DataFormat = DataFormat.Json
            },
                                                    OpCode.NoOp);

            Assert.Null(result);
        }
Esempio n. 23
0
        public void DecodeString_Returns_String_When_Buffer_Is_Empty_And_Type_Is_String()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter(), new DefaultSerializer());

            var bytes  = new byte[0];
            var result = transcoder.Decode <string>(bytes, 0, bytes.Length,
                                                    new Flags {
                DataFormat = DataFormat.String
            },
                                                    OperationCode.NoOp);

            Assert.AreEqual(null, result);
        }
        public void Test_Null()
        {
            var transcoder = new DefaultTranscoder(new ManualByteConverter());

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = TypeCode.Empty
            };

            var expected = new byte[0];
            var actual   = transcoder.Encode <string>(null, flags);

            Assert.AreEqual(expected, actual);
        }
Esempio n. 25
0
        public void Test_Deserialize_Char()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var value      = 'o';

            var flags = new Flags {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = value.GetTypeCode()
            };

            var bytes  = Encoding.UTF8.GetBytes(value.ToString());
            var actual = transcoder.Decode <char>(bytes, 0, bytes.Length, flags, OperationCode.Get);

            Assert.AreEqual(value, actual);
        }
        public void Should_Convert_To_CamelCase_Json_With_Default_Serialization_Settings()
        {
            var transcoder = new DefaultTranscoder(new ManualByteConverter());
            var data       = new Pascal
            {
                SomeProperty    = "SOME",
                SomeIntProperty = 12345,
                HasPascalCase   = true
            };
            var expectedJsonBytes = Encoding.UTF8.GetBytes("{\"someProperty\":\"SOME\",\"someIntProperty\":12345,\"hasPascalCase\":true}");
            var actualJsonBytes   = transcoder.SerializeAsJson(data);
            var actualJsonEncoded = transcoder.Encode(data, new Flags());

            Assert.AreEqual(expectedJsonBytes, actualJsonBytes);
            Assert.AreEqual(expectedJsonBytes, actualJsonEncoded);
        }
        public void Test_Serialize_UInt32()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            UInt32 data = 9;

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Reserved,
                TypeCode = data.GetTypeCode()
            };

            var expected = new byte[] { 0x09, 0x00, 0x00, 0x00 };
            var actual = transcoder.Encode(data, flags, OperationCode.Get);

            Assert.AreEqual(expected, actual);
        }
Esempio n. 28
0
        public void Test_Serialize_Int32()
        {
            var   transcoder = new DefaultTranscoder(new DefaultConverter());
            Int32 data       = 9;

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = Convert.GetTypeCode(data)
            };

            var expected = new byte[] { 0x09, 0x00, 0x00, 0x00 };
            var actual   = transcoder.Encode(data, flags, OpCode.Get);

            Assert.Equal(expected, actual);
        }
        public void Test_Deserialize_Null()
        {
            var    transcoder = new DefaultTranscoder(new ManualByteConverter());
            object value      = null;

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = TypeCode.Empty
            };

            var bytes  = transcoder.SerializeAsJson(value);
            var actual = transcoder.Decode <object>(bytes, 0, bytes.Length, flags);

            Assert.AreEqual(value, actual);
        }
Esempio n. 30
0
        public void Test_Deserialize_Int()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var five       = 5;

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = Convert.GetTypeCode(five)
            };

            var bytes  = transcoder.Encode(five, flags, OpCode.Get);
            var actual = transcoder.Decode <int>(bytes.AsMemory(), flags, OpCode.Get);

            Assert.Equal(five, actual);
        }
        public void Test_Deserialize_Int()
        {
            var transcoder = new DefaultTranscoder(new ManualByteConverter());
            var five       = 5;

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = five.GetTypeCode()
            };

            var bytes  = transcoder.Encode(five, flags);
            var actual = transcoder.Decode <int>(bytes, 0, bytes.Length, flags);

            Assert.AreEqual(five, actual);
        }
        public void Test_Char()
        {
            var transcoder = new DefaultTranscoder(new ManualByteConverter());
            var value      = 'o';

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = value.GetTypeCode()
            };

            var expected = new byte[] { 0x6f };
            var actual   = transcoder.Encode(value, flags);

            Assert.AreEqual(expected, actual);
        }
        public void Test_Serialize_String()
        {
            var    transcoder = new DefaultTranscoder(new ManualByteConverter());
            string data       = "Hello";

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = data.GetTypeCode()
            };

            var expected = new byte[] { 0x48, 0x65, 0x6c, 0x6c, 0x6f };
            var actual   = transcoder.Encode(data, flags);

            Assert.AreEqual(expected, actual);
        }
        public void Test_Serialize_Int64()
        {
            var   transcoder = new DefaultTranscoder(new ManualByteConverter());
            Int64 data       = 9;

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = data.GetTypeCode()
            };

            var expected = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09 };
            var actual   = transcoder.Encode(data, flags);

            Assert.AreEqual(expected, actual);
        }
Esempio n. 35
0
        public void Test_Deserialize_String()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var value      = "astring";

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat  = DataFormat.Reserved,
                TypeCode    = Convert.GetTypeCode(value)
            };

            var bytes  = transcoder.Encode(value, flags, OpCode.Get);
            var actual = transcoder.Decode <string>(bytes.AsMemory(), flags, OpCode.Get);

            Assert.Equal(value, actual);
        }
        public void Test_Timed_Execution_Parallel()
        {
            var options = new ParallelOptions { MaxDegreeOfParallelism = 4 };
            var converter = new DefaultConverter();
            var transcoder = new DefaultTranscoder(converter);
            var vbucket = GetVBucket();
            var n = 1000;//set to a higher # if needed

            using (new OperationTimer())
            {
                Parallel.For(0, n, options, i =>
                {
                    var key = string.Format("key{0}", i);
                    var set = new Set<int?>(key, i, vbucket, transcoder, OperationLifespanTimeout);
                    var result = IOService.Execute(set);
                    Assert.IsTrue(result.Success);

                    var get = new Get<int?>(key, vbucket, transcoder, OperationLifespanTimeout);
                    var result1 = IOService.Execute(get);
                    Assert.IsTrue(result1.Success);
                    Assert.AreEqual(i, result1.Value);
                });
            }
        }
        public void Should_Hydrate_Poco_In_PascalCase_Whatever_The_Case_In_Json()
        {
            byte[] jsonData = Encoding.UTF8.GetBytes("{ \"SomeProperty\": \"SOME\", \"someIntProperty\": 12345, \"haspAscalCASE\": true }");
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var hydrated = transcoder.DeserializeAsJson<Pascal>(jsonData, 0, jsonData.Length);

            Assert.AreEqual("SOME", hydrated.SomeProperty);
            Assert.AreEqual(12345, hydrated.SomeIntProperty);
            Assert.AreEqual(true, hydrated.HasPascalCase);
        }
        public void Should_Convert_To_PascalCase_Json_With_Altered_Serialization_Settings()
        {
            var transcoder = new DefaultTranscoder(
                new DefaultConverter(),
                new DefaultSerializer(
                    new JsonSerializerSettings(),
                    new JsonSerializerSettings
            {
                ContractResolver = new DefaultContractResolver()
            }));

            var data = new Pascal
            {
                SomeProperty = "SOME",
                SomeIntProperty = 12345,
                HasPascalCase = true
            };
            var expectedJsonBytes = Encoding.UTF8.GetBytes("{\"SomeProperty\":\"SOME\",\"SomeIntProperty\":12345,\"HasPascalCase\":true}");
            var actualJsonBytes = transcoder.SerializeAsJson(data);
            var actualJsonEncoded = transcoder.Encode(data, OperationCode.Get);

            Assert.AreEqual(expectedJsonBytes, actualJsonBytes);
            Assert.AreEqual(expectedJsonBytes, actualJsonEncoded);
        }
        public void Test_Byte_Array()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var value = new byte[] {0x00, 0x00, 0x01};

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Binary,
                TypeCode = Type.GetTypeCode(typeof(byte[]))
            };

            var bytes = transcoder.Encode(value, flags, OperationCode.Get);
            Assert.AreEqual(bytes, value);

            var actual = transcoder.Decode<byte[]>(bytes, 0, bytes.Length, flags, OperationCode.Get);
            Assert.AreEqual(bytes, actual);
        }
        public void Test_Json_Deserialize_Int()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            int value = 42;

            var bytes = transcoder.SerializeAsJson(value);
            var actual = transcoder.DeserializeAsJson<int>(bytes, 0, bytes.Length);

            Assert.AreEqual(value, actual);
        }
        public void Test_Deserialize_Null()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            object value = null;

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Reserved,
                TypeCode = TypeCode.Empty
            };

            var bytes = transcoder.SerializeAsJson(value);
            var actual = transcoder.Decode<object>(bytes, 0, bytes.Length, flags, OperationCode.Get);
            Assert.AreEqual(value, actual);
        }
        public void Test_Deserialize_String()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var value = "astring";

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Reserved,
                TypeCode = value.GetTypeCode()
            };

            var bytes = transcoder.Encode(value, flags, OperationCode.Get);
            var bytes1 = Encoding.UTF8.GetBytes(value);
            var actual = transcoder.Decode<string>(bytes, 0, bytes.Length, flags, OperationCode.Get);
            Assert.AreEqual(value, actual);
        }
        public void Test_Poco()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var value = new Person {Name = "jeff"};

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Reserved,
                TypeCode = Type.GetTypeCode(typeof(Person))
            };

            var bytes = transcoder.Encode(value, flags, OperationCode.Get);
            var actual = transcoder.Decode<Person>(new ArraySegment<byte>(bytes), 0, bytes.Length, flags, OperationCode.Get);

            Assert.AreEqual(value.Name, actual.Name);
        }
        public void Test_Deserialize_Int()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var five = 5;

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Reserved,
                TypeCode = five.GetTypeCode()
            };

            var bytes = transcoder.Encode(five, flags, OperationCode.Get);
            var actual = transcoder.Decode<int>(bytes, 0, bytes.Length, flags, OperationCode.Get);
            Assert.AreEqual(five, actual);

        }
        public void Test_Char()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var value = 'o';

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Reserved,
                TypeCode = value.GetTypeCode()
            };

            var expected = new byte[] { 0x6f };
            var actual = transcoder.Encode(value, flags, OperationCode.Get);

            Assert.AreEqual(expected, actual);
        }
        public void ScramShaMechanism_WhenMechanismIsInavlid_ThrowArgumentOutOfRangeException(string mechanismType)
        {
            var service = new Mock<IIOService>().Object;
            ITypeTranscoder transcoder = new DefaultTranscoder(new DefaultConverter());
            string username = "******";
            string password = "******";

            // ReSharper disable once ExpressionIsAlwaysNull
            // ReSharper disable once ObjectCreationAsStatement
            Assert.Throws<ArgumentOutOfRangeException>(() => new ScramShaMechanism(service, transcoder, username, password, mechanismType));
        }
        public void When_ByteArray_Is_Stored_With_Legacy_Flags_It_Is_Decoded_As_A_ByteArray()
        {
            var legacyByteArray = new byte[]
            {
                129, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 8, 0,
                0, 0, 5, 19, 185, 8, 248, 3, 104, 208, 188, 0,
                0, 250, 82, 116, 101, 115, 116
            };

            var converter = new DefaultConverter();
            var format = new byte();

            var temp = converter.ToByte(legacyByteArray, 24);
            converter.SetBit(ref format, 0, converter.GetBit(temp, 0));
            converter.SetBit(ref format, 1, converter.GetBit(temp, 1));
            converter.SetBit(ref format, 2, converter.GetBit(temp, 2));
            converter.SetBit(ref format, 3, converter.GetBit(temp, 3));

            var compression = new byte();
            converter.SetBit(ref compression, 4, converter.GetBit(temp, 4));
            converter.SetBit(ref compression, 5, converter.GetBit(temp, 5));
            converter.SetBit(ref compression, 6, converter.GetBit(temp, 6));

            var flags = new Flags
            {
                DataFormat = (DataFormat)format,
                Compression = (Compression)compression,
                TypeCode = (TypeCode)(converter.ToUInt16(legacyByteArray, 26) & 0xff),
            };

            var transcoder = new DefaultTranscoder(new DefaultConverter());
            var result = transcoder.Decode<byte[]>(legacyByteArray, 28, 4, flags, OperationCode.Get);
            Assert.AreEqual("test", Encoding.UTF8.GetString(result));
        }
        public void ScramShaMechanism_Authenticate_IsPopulated()
        {
            var service = new Mock<IIOService>().Object;
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            string password = "******";
            string username = "******";

            var mech = new ScramShaMechanism(service, transcoder, username, password, MechanismType.ScramSha256);
            Assert.That(() => !string.IsNullOrEmpty(mech.ClientNonce));
        }
 public void Should_Convert_To_CamelCase_Json_With_Default_Serialization_Settings()
 {
     var transcoder = new DefaultTranscoder(new DefaultConverter());
     var data = new Pascal
     {
         SomeProperty = "SOME",
         SomeIntProperty = 12345,
         HasPascalCase = true
     };
     var expectedJsonBytes = Encoding.UTF8.GetBytes("{\"someProperty\":\"SOME\",\"someIntProperty\":12345,\"hasPascalCase\":true}");
     var actualJsonBytes = transcoder.SerializeAsJson(data);
     var actualJsonEncoded = transcoder.Encode(data, new Flags{DataFormat = DataFormat.Json}, OperationCode.Get);
     Assert.AreEqual(expectedJsonBytes, actualJsonBytes);
     Assert.AreEqual(expectedJsonBytes, actualJsonEncoded);
 }
        public void Test_Serialize_String()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());
            string data = "Hello";

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Reserved,
                TypeCode = data.GetTypeCode()
            };

            var expected = new byte[] { 0x48, 0x65, 0x6c, 0x6c, 0x6f };
            var actual = transcoder.Encode(data, flags, OperationCode.Get);

            Assert.AreEqual(expected, actual);
        }
        public void Test_Null()
        {
            var transcoder = new DefaultTranscoder(new DefaultConverter());

            var flags = new Flags
            {
                Compression = Compression.None,
                DataFormat = DataFormat.Reserved,
                TypeCode = TypeCode.Empty
            };

            var expected = new byte[0];
            var actual = transcoder.Encode<string>(null, flags, OperationCode.Get);

            Assert.AreEqual(expected, actual);
        }