public void ToAlphanumeric_WithDecimal_ShouldMatchIdEncoderResult(decimal id)
        {
            var expectedResult = IdEncoder.GetAlphanumeric(id);

            var result = id.ToAlphanumeric();

            Assert.Equal(expectedResult, result);
        }
        public void GetAlphanumeric_Regularly_ShouldReturnSameResultAsForUlong(long id)
        {
            var expectedResult = IdEncoder.GetAlphanumeric((ulong)id);

            var result = IdEncoder.GetAlphanumeric(id);

            Assert.Equal(expectedResult, result);
        }
        [InlineData("1234567890_")]         // Invalid char
        public void GetLongOrDefault_Regularly_ShouldReturnSameResultAsTryGetLong(string input)
        {
            var expectedResult = IdEncoder.TryGetLong(input, out var expectedId)
                                ? expectedId
                                : (long?)null;

            var result = IdEncoder.GetLongOrDefault(input);

            Assert.Equal(expectedResult, result);
        }
        [InlineData("1234567890_")]         // Invalid char
        public void TryGetLong_Regularly_ShouldReturnSameResultAsTryGetUlong(string input)
        {
            var expectedSuccess = IdEncoder.TryGetUlong(input, out var expectedResult);

            var success = IdEncoder.TryGetLong(input, out var result);

            Assert.Equal(expectedSuccess, success);
            Assert.True(result >= 0L);
            Assert.Equal(expectedResult, (ulong)result);
        }
        public void ToAlphanumeric_WithUlongAndByteOutput_ShouldMatchIdEncoderResult(ulong id)
        {
            Span <byte> expectedOutput = stackalloc byte[11];

            IdEncoder.GetAlphanumeric(id, expectedOutput);

            Span <byte> output = stackalloc byte[11];

            id.ToAlphanumeric(output);

            Assert.True(output.SequenceEqual(expectedOutput));
        }
Exemplo n.º 6
0
        public void Encode_Decode_Results_Consistent()
        {
            int before = 8645;
            int after  = IdEncoder.Decode(IdEncoder.Encode(before));

            Assert.AreEqual(before, after);


            before = int.MaxValue;
            after  = IdEncoder.Decode(IdEncoder.Encode(before));

            Assert.AreEqual(before, after);
        }
Exemplo n.º 7
0
        public string ResolveUrlIdentifier(string urlShort)
        {
            var id        = IdEncoder.Decode(urlShort);
            var urlEntity = (from u in repository.Urls
                             where u.Id == id
                             select u
                             ).FirstOrDefault();

            if (urlEntity == null)
            {
                throw new Exception("Id not found");
            }
            return(urlEntity.Value);
        }
        [InlineData("1234567890_")]         // Invalid char
        public void GetLongOrDefault_WithByteInput_ShouldReturnSameResultAsWithStringInput(string inputString)
        {
            var expectedResult = IdEncoder.GetLongOrDefault(inputString);

            Span <byte> input = stackalloc byte[inputString.Length];

            for (var i = 0; i < input.Length; i++)
            {
                input[i] = (byte)inputString[i];
            }

            var result = IdEncoder.GetLongOrDefault(input);

            Assert.Equal(expectedResult, result);
        }
        private static bool[] CheckIfThrowsForAllEncodings(ulong id, byte[] bytes)
        {
            Span <char> chars = stackalloc char[bytes.Length];

            for (var i = 0; i < chars.Length; i++)
            {
                chars[i] = (char)bytes[i];
            }

            return(new[]
            {
                Throws(() => IdEncoder.GetAlphanumeric(id, bytes)),
                Throws(() => IdEncoder.GetAlphanumeric(id)),
            });
        }
        public void GetAlphanumeric_WithByteOutput_ShouldReturnSameResultAsWithStringOutput(long id)
        {
            Span <byte> expectedResult       = stackalloc byte[11];
            var         expectedResultString = IdEncoder.GetAlphanumeric(id);

            for (var i = 0; i < expectedResult.Length; i++)
            {
                expectedResult[i] = (byte)expectedResultString[i];
            }

            Span <byte> result = stackalloc byte[11];

            IdEncoder.GetAlphanumeric(id, result);

            Assert.True(result.SequenceEqual(expectedResult));
        }
        [InlineData("1234567890_")]         // Invalid char
        public void TryGetLong_WithByteInput_ShouldReturnSameResultAsWithStringInput(string inputString)
        {
            var expectedSuccess = IdEncoder.TryGetLong(inputString, out var expectedResult);

            Span <byte> input = stackalloc byte[inputString.Length];

            for (var i = 0; i < input.Length; i++)
            {
                input[i] = (byte)inputString[i];
            }

            var success = IdEncoder.TryGetLong(input, out var result);

            Assert.Equal(expectedSuccess, success);
            Assert.Equal(expectedResult, result);
        }
Exemplo n.º 12
0
        public string CreateUrlIdentifier(string url)
        {
            var urlEntity = (from u in repository.Urls
                             where u.Value == url
                             select u
                             ).FirstOrDefault();

            if (urlEntity == null)
            {
                urlEntity = new Url()
                {
                    Value = url
                };
                repository.InsertUrl(urlEntity);
            }

            return(IdEncoder.Encode(urlEntity.Id));
        }
Exemplo n.º 13
0
 public void UpdateUrlStatistics(string encodedId, System.Collections.Specialized.NameValueCollection nameValueCollection)
 {
     repository.IncreaseUrlHitCount(IdEncoder.Decode(encodedId));
 }
Exemplo n.º 14
0
        public static async Task <HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "push")]
            HttpRequestMessage req,
            TraceWriter log,
            CancellationToken ct)
        {
            try
            {
                var verifyCode = req
                                 .GetQueryNameValuePairs()
                                 .FirstOrDefault(q => q.Key.Equals("verify", StringComparison.Ordinal))
                                 .Value;

                if (verifyCode.HasValue())
                {
                    return(verifyCode.Equals(Constants.FitbitVerificationCode, StringComparison.Ordinal)
                                                ? new HttpResponseMessage(HttpStatusCode.NoContent)
                                                : new HttpResponseMessage(HttpStatusCode.NotFound));
                }

                var notificationsContent = await req.Content.ReadAsStringAsync();

                var notifications           = JsonConvert.DeserializeObject <Notification[]>(notificationsContent);
                var notificationsForwarding = notifications
                                              .GroupBy(notif => notif.SubscriptionId?.Substring(1), StringComparer.Ordinal)
                                              .Select(notifs =>
                {
                    string accessToken, locationId;
                    var parts = notifs.Key?.Split(new[] { '~' }, StringSplitOptions.RemoveEmptyEntries) ?? new string[0];
                    if (parts.Length == 2)
                    {
                        try
                        {
                            accessToken = IdEncoder.Decode(parts[0]).ToString("D");
                            locationId  = IdEncoder.Decode(parts[1]).ToString("D");
                        }
                        catch (Exception e)
                        {
                            log.Error($"Invalid subscription id: {notifs.Key}", e);
                            accessToken = locationId = null;
                        }
                    }
                    else
                    {
                        log.Error("Invalid number of parts, don't forward the notifications.");
                        accessToken = locationId = null;
                    }


                    return(new { accessToken, locationId, notifs });
                })
                                              .Where(x => x.accessToken.HasValue() && x.locationId.HasValue())
                                              .Select(x => Send(ct, log, x.accessToken, x.locationId, x.notifs));

                // TODO: Run async
                await Task.WhenAll(notificationsForwarding);

                return(req.CreateResponse(HttpStatusCode.NoContent));
            }
            catch (Exception e)
            {
                log.Error("Failed", e);

                throw;
            }
        }