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); }
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) } }); }
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); } }
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))) }); }
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)); }
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)); }
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); }
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); }