File: STOWRSRequest.cpp

package info (click to toggle)
odil 0.13.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,476 kB
  • sloc: cpp: 55,982; python: 3,947; javascript: 460; xml: 182; makefile: 99; sh: 36
file content (156 lines) | stat: -rw-r--r-- 5,511 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#define BOOST_TEST_MODULE STOWRSRequest
#include <boost/test/unit_test.hpp>

#include "odil/DataSet.h"
#include "odil/registry.h"
#include "odil/webservices/HTTPRequest.h"
#include "odil/webservices/ItemWithParameters.h"
#include "odil/webservices/multipart_related.h"
#include "odil/webservices/STOWRSRequest.h"
#include "odil/webservices/URL.h"
#include "odil/webservices/Utils.h"

struct Fixture
{
    odil::Value::DataSets data_sets;

    Fixture()
    {
        auto data_set_1 = std::make_shared<odil::DataSet>();
        data_set_1->add("SOPClassUID", {odil::registry::RawDataStorage});
        data_set_1->add("SOPInstanceUID", {"1.2.3.4"});
        data_set_1->add("PatientID", {"DJ1234"});
        data_set_1->add("PixelSpacing", {1.5, 2.5});

        auto data_set_2 = std::make_shared<odil::DataSet>();
        data_set_2->add("SOPClassUID", {odil::registry::MRImageStorage});
        data_set_2->add("SOPInstanceUID", {"1.2.3.5"});
        data_set_2->add("PatientName", {"Doe^John"});
        data_set_2->add("PatientAge", {"042Y"});
        data_set_2->add("Signature", odil::Value::Binary({{0x01, 0x02, 0x03, 0x04}}));

        this->data_sets = { data_set_1, data_set_2 };
    }
};

odil::webservices::URL const base_url_http{
    "http", "example.com", "/dicom", "", ""};

odil::webservices::URL const full_url {
    "http", "example.com", "/dicom/studies/1.2",
    "", // query
    ""// fragment
};

odil::webservices::Selector const selector{{{"studies", "1.2"}}};

BOOST_AUTO_TEST_CASE(Constructor_BaseUrl)
{
    odil::webservices::STOWRSRequest const request(base_url_http);
    BOOST_REQUIRE(request.get_base_url() == base_url_http);
}

BOOST_AUTO_TEST_CASE(Base_Url)
{
    odil::webservices::STOWRSRequest request(base_url_http);
    odil::webservices::URL const base_url_http2{
        "http", "second_example.com", "/dicom", "", ""};
    request.set_base_url(base_url_http2);
    BOOST_REQUIRE(request.get_base_url() == base_url_http2);
}

BOOST_AUTO_TEST_CASE(Constructor_Http)
{
    odil::webservices::HTTPRequest http_request("POST", full_url);
    http_request.set_header(
        "Content-Type", "multipart/related;type=application/dicom");
    odil::webservices::STOWRSRequest const request(http_request);

    BOOST_REQUIRE(request.get_url() == full_url);
    BOOST_REQUIRE_EQUAL(request.get_media_type(), "application/dicom");
    BOOST_REQUIRE(
        request.get_representation() == odil::webservices::Representation::DICOM);
    BOOST_REQUIRE(request.get_selector() == selector);
}

BOOST_FIXTURE_TEST_CASE(DataSets, Fixture)
{
    odil::webservices::STOWRSRequest request(base_url_http);
    request.get_data_sets() = data_sets;

    BOOST_REQUIRE(request.get_data_sets() == data_sets);
}

BOOST_FIXTURE_TEST_CASE(FailRequestDataSets, Fixture)
{
    odil::webservices::STOWRSRequest request(base_url_http);
    odil::webservices::Selector const selector{
        {{"studies", "1.2"},{"series", "3.4"}}
    };;

    //-------------------- Require exception
    BOOST_REQUIRE_THROW(
        request.request_dicom(
            data_sets, selector, odil::webservices::Representation::DICOM),
        odil::Exception);
}

BOOST_FIXTURE_TEST_CASE(GetHttpRequest, Fixture)
{
    odil::webservices::STOWRSRequest request(base_url_http);
    request.request_dicom(
        data_sets, selector, odil::webservices::Representation::DICOM_XML);
    odil::webservices::HTTPRequest http_request = request.get_http_request();

    BOOST_REQUIRE(http_request.has_header("Content-Type"));
    BOOST_REQUIRE_EQUAL(http_request.get_method(), "POST");
    BOOST_REQUIRE_EQUAL(http_request.get_http_version(), "HTTP/1.0");

    // Two part for dataSets & 1 for binary
    BOOST_REQUIRE_EQUAL(odil::webservices::count_parts(http_request), 3);

    BOOST_REQUIRE(request.get_base_url() == base_url_http);

    request.request_dicom(
        data_sets, selector, odil::webservices::Representation::DICOM);
    odil::webservices::HTTPRequest http_request_dcm = request.get_http_request();

    // only two parts here
    BOOST_REQUIRE_EQUAL(odil::webservices::count_parts(http_request_dcm), 2);
}

BOOST_FIXTURE_TEST_CASE(DataSetsEquality, Fixture)
{
    // We use a getHttpRequest function that can change the dataSet internally,
    // and we check if they remain the sames
    odil::webservices::STOWRSRequest request(base_url_http);
    request.request_dicom(
        {data_sets[0]}, selector,
        odil::webservices::Representation::DICOM_JSON);
    odil::webservices::HTTPRequest http_request = request.get_http_request();

    BOOST_REQUIRE(
        request.get_data_sets() == odil::Value::DataSets({data_sets[0]}));
}

BOOST_FIXTURE_TEST_CASE(Equality, Fixture)
{
    odil::webservices::STOWRSRequest request(base_url_http);
    request.request_dicom(
        data_sets, selector, odil::webservices::Representation::DICOM);
    odil::webservices::HTTPRequest const http_request = request.get_http_request();
    odil::webservices::STOWRSRequest second_request(http_request);

    BOOST_REQUIRE(request == second_request);
}

BOOST_FIXTURE_TEST_CASE(Equality_2, Fixture)
{
    odil::webservices::STOWRSRequest request(base_url_http);
    request.request_dicom(
        data_sets, selector, odil::webservices::Representation::DICOM_XML);
    odil::webservices::HTTPRequest http_request = request.get_http_request();
    odil::webservices::STOWRSRequest request_copy(http_request);
    BOOST_REQUIRE(request_copy == request);
    BOOST_REQUIRE(data_sets == request_copy.get_data_sets());
}