Ejemplo n.º 1
0
        public void AllMessageCodesInMessageCodeEnum()
        {
            var messageMapByName = new Dictionary <string, ushort>();

            var    currentDir            = Environment.CurrentDirectory;
            string riak_pb_messages_file =
                Path.GetFullPath(Path.Combine(currentDir, "..", "..", "..", "riak_pb", "src", "riak_pb_messages.csv"));

            if (!File.Exists(riak_pb_messages_file))
            {
                Assert.Ignore("Please run 'git submodule update --init' before running this test. Required file is missing: '{0}'", riak_pb_messages_file);
            }

            string[] msg_csv = File.ReadAllLines(riak_pb_messages_file);
            foreach (string line in msg_csv)
            {
                string[] parts       = line.Split(csv_split);
                ushort   messageCode = UInt16.Parse(parts[0]);
                string   messageName = parts[1];

                messageMapByName.Add(messageName, messageCode);
            }

            var messageCodeEnumNames = Enum.GetNames(typeof(MessageCode));

            foreach (string name in messageMapByName.Keys)
            {
                Assert.True(messageCodeEnumNames.Contains(name),
                            string.Format("CSV contains name '{0}' but enum does NOT", name));

                ushort messageCodeValue = messageMapByName[name];

                MessageCode parsedMessageCode;
                Assert.True(Enum.TryParse(messageCodeValue.ToString(), out parsedMessageCode),
                            string.Format("Can't parse message code '{0}' with value '{1}' as Message Code enum",
                                          name, messageCodeValue));

                bool condition =
                    parsedMessageCode.Equals(MessageCode.RpbPingReq) ||        // NB: Does not have a protobuf message class
                    parsedMessageCode.Equals(MessageCode.RpbPingResp) ||
                    parsedMessageCode.Equals(MessageCode.RpbGetClientIdReq) || // NB: unused
                    parsedMessageCode.Equals(MessageCode.RpbGetClientIdResp) ||
                    parsedMessageCode.Equals(MessageCode.RpbGetServerInfoReq) ||
                    parsedMessageCode.Equals(MessageCode.RpbSetClientIdReq) ||
                    parsedMessageCode.Equals(MessageCode.RpbSetClientIdResp) ||
                    parsedMessageCode.Equals(MessageCode.RpbDelResp) ||
                    parsedMessageCode.Equals(MessageCode.RpbSetBucketResp) ||
                    parsedMessageCode.Equals(MessageCode.RpbResetBucketResp) ||
                    parsedMessageCode.Equals(MessageCode.RpbAuthResp) ||
                    parsedMessageCode.Equals(MessageCode.RpbStartTls) ||
                    MessageCodeTypeMapBuilder.Contains(parsedMessageCode);
                Assert.True(condition, string.Format("MessageCodeTypeMapBuilder does NOT contain '{0}'", parsedMessageCode));
            }

            foreach (string name in messageCodeEnumNames)
            {
                Assert.True(messageMapByName.ContainsKey(name),
                            string.Format("MessageCode enum contains name '{0}' but CSV does NOT", name));
            }
        }
Ejemplo n.º 2
0
        private int ReadMessageSize(MessageCode expectedCode)
        {
            int         size        = 0;
            MessageCode messageCode = ReceiveHeader(out size);

            if (!MessageCodeTypeMapBuilder.Contains(messageCode))
            {
                throw new RiakInvalidDataException((byte)messageCode);
            }

            if (expectedCode != messageCode)
            {
                string errorMessage = string.Format("Expected return code {0} received {1}", expectedCode, messageCode);
                throw new RiakException(errorMessage, false);
            }

            return(size);
        }
Ejemplo n.º 3
0
        private int DoRead(MessageCode expectedCode, Type expectedType)
        {
            int         size        = 0;
            MessageCode messageCode = ReceiveHeader(out size);

            if (!MessageCodeTypeMapBuilder.Contains(messageCode))
            {
                throw new RiakInvalidDataException((byte)messageCode);
            }

            if (expectedCode != messageCode)
            {
                string errorMessage = string.Format("Expected return code {0} received {1}", expectedCode, messageCode);
                throw new RiakException(errorMessage, false);
            }

            /*
             * Removed #if DEBUG because this seems like a good check
             * This message code validation is here to make sure that the caller
             * is getting exactly what they expect.
             * TODO: FUTURE - does this check impact performance?
             */
            Type typeForMessageCode = MessageCodeTypeMapBuilder.GetTypeFor(messageCode);

            if (typeForMessageCode != expectedType)
            {
                string receivedMessageCodeTypeName = MessageCodeTypeMapBuilder.GetTypeNameFor(messageCode);
                throw new InvalidOperationException(
                          string.Format(
                              "Attempt to decode message to type '{0}' when received type '{1}'.",
                              expectedType.Name,
                              receivedMessageCodeTypeName));
            }

            return(size);
        }