Esempio n. 1
0
        public async Task Start()
        {
            await _tcpSocketClient.ConnectAsync(_url.Host, _url.Port, _config.EncryptionLevel == EncryptionLevel.Encrypted).ConfigureAwait(false);

            IsOpen = true;
            _config.Logger?.Debug($"~~ [CONNECT] {_url}");

            var version = await DoHandshake().ConfigureAwait(false);

            switch (version)
            {
            case ProtocolVersion.Version1:
                _config.Logger?.Debug("S: [HANDSHAKE] 1");

                var formatV1 = new PackStreamMessageFormatV1(_tcpSocketClient, _config.Logger);
                _writer = formatV1.Writer;
                _reader = formatV1.Reader;
                break;

            case ProtocolVersion.NoVersion:
                throw new NotSupportedException("The Neo4j server does not support any of the protocol versions supported by this client. " +
                                                "Ensure that you are using driver and server versions that are compatible with one another.");

            case ProtocolVersion.Http:
                throw new NotSupportedException("Server responded HTTP. Make sure you are not trying to connect to the http endpoint " +
                                                "(HTTP defaults to port 7474 whereas BOLT defaults to port 7687)");

            default:
                throw new NotSupportedException("Protocol error, server suggested unexpected protocol version: " + version);
            }
        }
Esempio n. 2
0
        private void SetupPackStreamFormatWriterAndReader(bool supportBytes = true)
        {
            var formatV1 = new PackStreamMessageFormatV1(_tcpSocketClient, _logger, supportBytes);

            _writer = formatV1.Writer;
            _reader = formatV1.Reader;
        }
            public void PacksInitMessageCorrectly()
            {
                var mocks = new Mocks();

                var writer =
                    new PackStreamMessageFormatV1(mocks.TcpSocketClient, null).Writer;

                writer.Write(new InitMessage("a", new Dictionary <string, object>()));
                writer.Flush();

                mocks.VerifyWrite(new byte[] { 0x00, 0x05, 0xB1, 0x01, 0x81, 0x61, 0xA0, 0x00, 0x00 });
            }
            public void PackRunMessageCorrectly()
            {
                var mocks = new Mocks();

                var writer =
                    new PackStreamMessageFormatV1(mocks.TcpSocketClient, null).Writer;

                writer.Write(new RunMessage("RETURN 1 AS num"));
                writer.Flush();
                mocks.VerifyWrite(
                    "00 13 b2 10  8f 52 45 54  55 52 4e 20  31 20 41 53 20 6e 75 6d  a0 00 00".ToByteArray());
            }
            public void PackRunMessageWithStringParamCorrectly(string value, string expectedBytes)
            {
                var mocks = new Mocks();

                var writer =
                    new PackStreamMessageFormatV1(mocks.TcpSocketClient, null).Writer;
                var values = new Dictionary <string, object> {
                    { "value", value }
                };

                writer.Write(new RunMessage("", values));
                writer.Flush();
                mocks.VerifyWrite(expectedBytes.ToByteArray());
            }
Esempio n. 6
0
            public void PackRunMessageWithIntegerParamCorrectly(long value, string expectedBytes)
            {
                var mocks = new Mocks();

                var writer =
                    new PackStreamMessageFormatV1(mocks.TcpSocketClient, new BigEndianTargetBitConverter(), null).Writer;
                var values = new Dictionary <string, object> {
                    { "integer", value }
                };

                writer.Write(new RunMessage("", values));
                writer.Flush();
                mocks.VerifyWrite(expectedBytes.ToByteArray());
            }
            public void PackRunMessageWithArrayParamCorrectly()
            {
                var    value         = new int[] { 1, 2 };
                string expectedBytes = "00 0D B2 10 80 A1 85 76 61 6C 75 65 92 01 02 00 00";
                var    mocks         = new Mocks();

                var writer =
                    new PackStreamMessageFormatV1(mocks.TcpSocketClient, null).Writer;
                var values = new Dictionary <string, object> {
                    { "value", value }
                };

                writer.Write(new RunMessage("", values));
                writer.Flush();
                mocks.VerifyWrite(expectedBytes.ToByteArray());
            }
Esempio n. 8
0
            public void PackRunMessageWithArrayListParamCorrectly()
            {
                var    value         = new ArrayList();
                string expectedBytes = "00 0B B2 10 80 A1 85 76 61 6C 75 65 90 00 00";
                var    mocks         = new Mocks();

                var writer =
                    new PackStreamMessageFormatV1(mocks.TcpSocketClient, new BigEndianTargetBitConverter(), null).Writer;
                var values = new Dictionary <string, object> {
                    { "value", value }
                };

                writer.Write(new RunMessage("", values));
                writer.Flush();
                mocks.VerifyWrite(expectedBytes.ToByteArray());
            }
            public void PackRunMessageWithDictionaryMixedTypesParamCorrectly()
            {
                var value = new Dictionary <string, object> {
                    { "key1", 1 }, { "key2", "a string value" }
                };
                string expectedBytes =
                    " 00 25 B2 10 80 A1 85 76 61 6C 75 65 A2 84 6B 65 79 31 01 84 6B 65 79 32 8E 61 20 73 74 72 69 6E 67 20 76 61 6C 75 65 00 00";
                var mocks = new Mocks();

                var writer =
                    new PackStreamMessageFormatV1(mocks.TcpSocketClient, null).Writer;
                var values = new Dictionary <string, object> {
                    { "value", value }
                };

                writer.Write(new RunMessage("", values));
                writer.Flush();
                mocks.VerifyWrite(expectedBytes.ToByteArray());
            }
        public async Task Start()
        {
            await _tcpSocketClient.ConnectAsync(_url.Host, _url.Port, _config.EncryptionLevel == EncryptionLevel.Encrypted).ConfigureAwait(false);

            IsOpen = true;
            _config.Logger?.Debug($"~~ [CONNECT] {_url}");

            var version = await DoHandshake().ConfigureAwait(false);

            if (version != 1)
            {
                throw new NotSupportedException("The Neo4j Server doesn't support this client.");
            }
            _config.Logger?.Debug("S: [HANDSHAKE] 1");

            var formatV1 = new PackStreamMessageFormatV1(_tcpSocketClient, BitConverter, _config.Logger);

            _writer = formatV1.Writer;
            _reader = formatV1.Reader;
        }