Пример #1
0
        public void AncoredLinkFormat()
        {
            // Arrange
            var expected = "</sensor/temp>;if=\"sensor\";rt=\"temperature-c\""
                           + ",<http://stupid.schema.io/temperature.json>;anchor=\"/sensor/temp\"";

            var resources = new List <CoapResourceMetadata>
            {
                new CoapResourceMetadata("/sensor/temp")
                {
                    InterfaceDescription = { "sensor" },
                    ResourceTypes        = { "temperature-c" }
                },
                new CoapResourceMetadata("http://stupid.schema.io/temperature.json")
                {
                    Anchor = "/sensor/temp"
                },
            };

            // Act
            var actual = CoreLinkFormat.ToCoreLinkFormat(resources);

            // Assert
            Assert.AreEqual(expected, actual);
        }
Пример #2
0
        private CoapMessage GenerateCoreLinkResource(CoapMessage message)
        {
            if (message.Code != CoapMessageCode.Get)
            {
                return(CoapMessage.FromException(new CoapException("Method not allowed", CoapMessageCode.MethodNotAllowed)));
            }

            var links = _discoverableResources.DiscoverableResources
                        .Select(r => new CoapResourceMetadata(r.Href)
            {
                ResourceTypes         = r.ResourceTypes,
                SuggestedContentTypes = { CoapOptions.ContentFormatType.ApplicationCbor, CoapOptions.ContentFormatType.ApplicationJson },
                Title = r.Title,
            });

            return(new CoapMessage
            {
                Code = CoapMessageCode.Content,
                Type = message.Type == CoapMessageType.Confirmable ? CoapMessageType.Acknowledgement : CoapMessageType.NonConfirmable,
                Payload = Encoding.UTF8.GetBytes(CoreLinkFormat.ToCoreLinkFormat(links)),
                Options =
                {
                    new CoapOptions.ContentFormat(CoapOptions.ContentFormatType.ApplicationLinkFormat)
                }
            });
        }
Пример #3
0
        private IEnumerable <DeviceResource> GetResources(Device device, string payload)
        {
            var coreResources = CoreLinkFormat.Parse(payload);

            foreach (var coreResource in coreResources)
            {
                var resource = new DeviceResource
                {
                    Device = device,
                    Url    = coreResource.UriReference,
                };

                if (!string.IsNullOrEmpty(coreResource.Title))
                {
                    resource.Name = coreResource.Title;
                }

                if (coreResource.SuggestedContentTypes.Count > 0)
                {
                    resource.ContentFormat = coreResource.SuggestedContentTypes[0];
                }

                yield return(resource);
            }
        }
Пример #4
0
 public override CoapMessage Get(CoapMessage request)
 {
     // TODO: Allow resources to opt out?
     // TODO: filter result based on get paremeters
     return(new CoapMessage
     {
         Code = CoapMessageCode.Content,
         Options = { new ContentFormat(ContentFormatType.ApplicationLinkFormat) },
         Payload = Encoding.UTF8.GetBytes(
             CoreLinkFormat.ToCoreLinkFormat(_resourceHandler.Resources.Select(r => r.Metadata)))
     });
 }
Пример #5
0
        public void ParseExtensiveLinkFormat()
        {
            // Arrange
            var expected = new List <CoapResourceMetadata>
            {
                new CoapResourceMetadata("/sensor/temp")
                {
                    InterfaceDescription = { "sensor", "read" },
                    ResourceTypes        = { "temperature-c", "temperature-f" },
                    Rel      = { "one", "two" },
                    HrefLang = "en-nz",
                    Media    = "none",
                    Title    = "Outside Temperature",
                    TitleExt = "Primo Sensor",
                    SuggestedContentTypes =
                    {
                        Options.ContentFormatType.TextPlain,
                        Options.ContentFormatType.ApplicationJson
                    }
                },
                new CoapResourceMetadata("http://stupid.schema.io/temperature.json")
                {
                    Anchor = "/sensor/temp"
                },
                new CoapResourceMetadata("/firmware/v2.1")
                {
                    ResourceTypes         = { "firmware" },
                    SuggestedContentTypes = { Options.ContentFormatType.ApplicationOctetStream },
                    MaxSize = 262144
                }
            };

            var message = "</sensor/temp>;if=\"sensor read\";ct=\"0 50\";rt=\"temperature-c temperature-f\";rel=\"one two\";hreflang=en-nz;media=none;title=\"Outside Temperature\";title*=utf-8'en-nz'\"Primo Sensor\""
                          + ",<http://stupid.schema.io/temperature.json>;anchor=\"/sensor/temp\""
                          + ",</firmware/v2.1>;rt=\"firmware\";ct=42;sz=262144";

            // Act
            var actual = CoreLinkFormat.Parse(message);

            // Assert
            Assert.IsTrue(expected.SequenceEqual(actual));
        }
Пример #6
0
        public void ParseSimpleLinkFormat()
        {
            // Arrange
            var expected = new List <CoapResourceMetadata>
            {
                new CoapResourceMetadata("/sensor/temp")
                {
                    InterfaceDescription = { "sensor" }
                },
                new CoapResourceMetadata("/sensor/light")
                {
                    InterfaceDescription = { "sensor" }
                }
            };

            var message = "</sensor/temp>;if=\"sensor\",</sensor/light>;if=\"sensor\"";

            // Act
            var actual = CoreLinkFormat.Parse(message);

            // Assert
            Assert.IsTrue(expected.SequenceEqual(actual));
        }
Пример #7
0
        public void SimpleLinkFormat()
        {
            // Arrange
            var expected = "</sensor/temp>;if=\"sensor\",</sensor/light>;if=\"sensor\"";

            var resources = new List <CoapResourceMetadata>
            {
                new CoapResourceMetadata("/sensor/temp")
                {
                    InterfaceDescription = { "sensor" }
                },
                new CoapResourceMetadata("/sensor/light")
                {
                    InterfaceDescription = { "sensor" }
                }
            };

            // Act
            var actual = CoreLinkFormat.ToCoreLinkFormat(resources);

            // Assert
            Assert.AreEqual(expected, actual);
        }
Пример #8
0
        public void ExtensiveLinkFormat()
        {
            // Arrange
            var expected = "</sensor/temp>;if=\"sensor read\";ct=\"0 50\";rt=\"temperature-c temperature-f\";rel=\"one two\";hreflang=en-nz;media=none;title=\"Outside Temperature\""
                           + ",</firmware/v2.1>;ct=42;rt=\"firmware\";sz=262144";

            var resources = new List <CoapResourceMetadata>
            {
                new CoapResourceMetadata("/sensor/temp")
                {
                    InterfaceDescription = { "sensor", "read" },
                    ResourceTypes        = { "temperature-c", "temperature-f" },
                    Rel      = { "one", "two" },
                    HrefLang = "en-nz",
                    Media    = "none",
                    Title    = "Outside Temperature",
                    TitleExt = "Primo Sensor",
                    SuggestedContentTypes =
                    {
                        Options.ContentFormatType.TextPlain,
                        Options.ContentFormatType.ApplicationJson
                    }
                },
                new CoapResourceMetadata("/firmware/v2.1")
                {
                    ResourceTypes         = { "firmware" },
                    SuggestedContentTypes = { Options.ContentFormatType.ApplicationOctetStream },
                    MaxSize = 262144
                }
            };

            // Act
            var actual = CoreLinkFormat.ToCoreLinkFormat(resources);

            // Assert
            Assert.AreEqual(expected, actual);
        }