You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by de...@apache.org on 2017/01/24 15:59:22 UTC
[1/3] incubator-trafficcontrol git commit: adds deliveryservice_regex
crud
Repository: incubator-trafficcontrol
Updated Branches:
refs/heads/master b55605b26 -> 9b0b3acb3
adds deliveryservice_regex crud
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/6f01ad02
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/6f01ad02
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/6f01ad02
Branch: refs/heads/master
Commit: 6f01ad0235fdb1ef8e937736bb071ae7b004055a
Parents: f2fe62a
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Fri Jan 13 10:53:10 2017 -0700
Committer: Jeremy Mitchell <mi...@gmail.com>
Committed: Mon Jan 23 16:17:33 2017 -0700
----------------------------------------------------------------------
docs/source/development/traffic_ops.rst | 3 +-
.../v12/deliveryservice_regex.rst | 374 +++++++++++++++++++
.../app/lib/API/DeliveryServiceRegexes.pm | 235 +++++++++++-
.../app/lib/Fixtures/DeliveryserviceRegex.pm | 2 +-
traffic_ops/app/lib/TrafficOpsRoutes.pm | 7 +-
.../app/t/api/1.2/deliveryservice_regex.t | 66 +++-
6 files changed, 681 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6f01ad02/docs/source/development/traffic_ops.rst
----------------------------------------------------------------------
diff --git a/docs/source/development/traffic_ops.rst b/docs/source/development/traffic_ops.rst
index 9e30148..57ea3ef 100644
--- a/docs/source/development/traffic_ops.rst
+++ b/docs/source/development/traffic_ops.rst
@@ -597,7 +597,7 @@ API 1.1 Reference
traffic_ops_api/v11/type
traffic_ops_api/v11/user
-API 1.2 Reference
+API 1.2 Reference
-----------------
.. toctree::
@@ -609,6 +609,7 @@ API 1.2 Reference
traffic_ops_api/v12/cdn
traffic_ops_api/v12/changelog
traffic_ops_api/v12/deliveryservice
+ traffic_ops_api/v12/deliveryservice_regex
traffic_ops_api/v12/deliveryservice_stats
traffic_ops_api/v12/division
traffic_ops_api/v12/federation
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6f01ad02/docs/source/development/traffic_ops_api/v12/deliveryservice_regex.rst
----------------------------------------------------------------------
diff --git a/docs/source/development/traffic_ops_api/v12/deliveryservice_regex.rst b/docs/source/development/traffic_ops_api/v12/deliveryservice_regex.rst
new file mode 100644
index 0000000..16697ec
--- /dev/null
+++ b/docs/source/development/traffic_ops_api/v12/deliveryservice_regex.rst
@@ -0,0 +1,374 @@
+..
+..
+.. Licensed under the Apache License, Version 2.0 (the "License");
+.. you may not use this file except in compliance with the License.
+.. You may obtain a copy of the License at
+..
+.. http://www.apache.org/licenses/LICENSE-2.0
+..
+.. Unless required by applicable law or agreed to in writing, software
+.. distributed under the License is distributed on an "AS IS" BASIS,
+.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+.. See the License for the specific language governing permissions and
+.. limitations under the License.
+..
+
+
+.. _to-api-v12-ds-regexes:
+
+Delivery Service Regexes
+========================
+
+.. _to-api-v12-ds-regexes-route:
+
+
+**GET /api/1.2/deliveryservices_regexes**
+
+ Retrieves regexes for all delivery services.
+
+ Authentication Required: Yes
+
+ Role(s) Required: Admin or Oper
+
+ **Response Properties**
+
+ +------------------+--------+-------------------------------------------------------------------------+
+ | Parameter | Type | Description |
+ +==================+========+=========================================================================+
+ | ``dsName`` | array | Delivery service name. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``regexes`` | array | An array of regexes for the delivery service. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``>type`` | string | The regex type. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``>pattern`` | string | The regex pattern. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``>setNumber`` | string | The order in which the regex is evaluated. |
+ +------------------+--------+-------------------------------------------------------------------------+
+
+ **Response Example** ::
+
+ {
+ "response": [
+ {
+ "dsName": "foo-bar",
+ "regexes": [
+ {
+ "type": "HOST_REGEXP",
+ "pattern": ".*\.foo-bar\..*",
+ "setNumber": 0
+ },
+ {
+ "type": "HOST_REGEXP",
+ "pattern": "foo.bar.com",
+ "setNumber": 1
+ }
+ ]
+ },
+ { ... }
+ ]
+ }
+
+|
+
+**GET /api/1.2/deliveryservices/{:dsId}/regexes**
+
+ Retrieves regexes for a specific delivery service.
+
+ Authentication Required: Yes
+
+ Role(s) Required: None
+
+ **Request Route Parameters**
+
+ +-----------+----------+---------------------------------------------+
+ | Name | Required | Description |
+ +===========+==========+=============================================+
+ | ``dsId`` | yes | Delivery service id. |
+ +-----------+----------+---------------------------------------------+
+
+ **Response Properties**
+
+ +------------------+--------+-------------------------------------------------------------------------+
+ | Parameter | Type | Description |
+ +==================+========+=========================================================================+
+ | ``id`` | string | Delivery service regex ID. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``type`` | string | Delivery service regex type ID. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``typeName`` | string | Delivery service regex type name. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``pattern`` | string | Delivery service regex pattern. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``setNumber`` | string | The order in which the regex is evaluated for the delivery service. |
+ +------------------+--------+-------------------------------------------------------------------------+
+
+ **Response Example** ::
+
+ {
+ "response": [
+ {
+ "id": 852,
+ "type": 18,
+ "typeName": "HOST_REGEXP",
+ "pattern": ".*\.foo-bar\..*",
+ "setNumber": 0
+ },
+ {
+ "id": 853,
+ "type": 18,
+ "typeName": "HOST_REGEXP",
+ "pattern": "foo.bar.com",
+ "setNumber": 1
+ }
+ ]
+ }
+
+|
+
+**GET /api/1.2/deliveryservices/{:dsId}/regexes/{:id}**
+
+ Retrieves a regex for a specific delivery service.
+
+ Authentication Required: Yes
+
+ Role(s) Required: None
+
+ **Request Route Parameters**
+
+ +-----------+----------+---------------------------------------------+
+ | Name | Required | Description |
+ +===========+==========+=============================================+
+ | ``dsId`` | yes | Delivery service id. |
+ +-----------+----------+---------------------------------------------+
+ | ``id`` | yes | Delivery service regex id. |
+ +-----------+----------+---------------------------------------------+
+
+ **Response Properties**
+
+ +------------------+--------+-------------------------------------------------------------------------+
+ | Parameter | Type | Description |
+ +==================+========+=========================================================================+
+ | ``id`` | string | Delivery service regex ID. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``type`` | string | Delivery service regex type ID. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``typeName`` | string | Delivery service regex type name. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``pattern`` | string | Delivery service regex pattern. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``setNumber`` | string | The order in which the regex is evaluated for the delivery service. |
+ +------------------+--------+-------------------------------------------------------------------------+
+
+ **Response Example** ::
+
+ {
+ "response": [
+ {
+ "id": 852,
+ "type": 18,
+ "typeName": "HOST_REGEXP"
+ "pattern": ".*\.foo-bar\..*",
+ "setNumber": 0
+ }
+ ]
+ }
+
+|
+
+**POST /api/1.2/deliveryservices/{:dsId}/regexes**
+
+ Create a regex for a delivery service.
+
+ Authentication Required: Yes
+
+ Role(s) Required: Admin or Oper
+
+ **Request Route Parameters**
+
+ +-----------+----------+---------------------------------------------+
+ | Name | Required | Description |
+ +===========+==========+=============================================+
+ | ``dsId`` | yes | Delivery service id. |
+ +-----------+----------+---------------------------------------------+
+
+ **Request Properties**
+
+ +---------------+----------+---------------------------------------------+
+ | Parameter | Required | Description |
+ +===============+==========+=============================================+
+ | ``pattern`` | yes | Regex pattern. |
+ +---------------+----------+---------------------------------------------+
+ | ``type`` | yes | Regex type ID. |
+ +---------------+----------+---------------------------------------------+
+ | ``setNumber`` | yes | Regex type ID. |
+ +---------------+----------+---------------------------------------------+
+
+ **Request Example** ::
+
+ {
+ "pattern": ".*\.foo-bar\..*"
+ "type": 18
+ "setNumber": 0
+ }
+
+|
+
+ **Response Properties**
+
+ +------------------+--------+-------------------------------------------------------------------------+
+ | Parameter | Type | Description |
+ +==================+========+=========================================================================+
+ | ``id`` | string | Delivery service regex ID. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``type`` | string | Delivery service regex type ID. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``typeName`` | string | Delivery service regex type name. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``pattern`` | string | Delivery service regex pattern. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``setNumber`` | string | The order in which the regex is evaluated for the delivery service. |
+ +------------------+--------+-------------------------------------------------------------------------+
+
+ **Response Example** ::
+
+ {
+ "response":{
+ "id": 852,
+ "type": 18,
+ "typeName": "HOST_REGEXP"
+ "pattern": ".*\.foo-bar\..*",
+ "setNumber": 0
+ },
+ "alerts":[
+ {
+ "level": "success",
+ "text": "Delivery service regex creation was successful."
+ }
+ ]
+ }
+
+|
+
+**PUT /api/1.2/deliveryservices/{:dsId}/regexes/{:id}**
+
+ Update a regex for a delivery service.
+
+ Authentication Required: Yes
+
+ Role(s) Required: Admin or Oper
+
+ **Request Route Parameters**
+
+ +-----------+----------+---------------------------------------------+
+ | Name | Required | Description |
+ +===========+==========+=============================================+
+ | ``dsId`` | yes | Delivery service id. |
+ +-----------+----------+---------------------------------------------+
+ | ``id`` | yes | Delivery service regex id. |
+ +-----------+----------+---------------------------------------------+
+
+ **Request Properties**
+
+ +---------------+----------+---------------------------------------------+
+ | Parameter | Required | Description |
+ +===============+==========+=============================================+
+ | ``pattern`` | yes | Regex pattern. |
+ +---------------+----------+---------------------------------------------+
+ | ``type`` | yes | Regex type ID. |
+ +---------------+----------+---------------------------------------------+
+ | ``setNumber`` | yes | Regex type ID. |
+ +---------------+----------+---------------------------------------------+
+
+ **Request Example** ::
+
+ {
+ "pattern": ".*\.foo-bar\..*"
+ "type": 18
+ "setNumber": 0
+ }
+
+|
+
+ **Response Properties**
+
+ +------------------+--------+-------------------------------------------------------------------------+
+ | Parameter | Type | Description |
+ +==================+========+=========================================================================+
+ | ``id`` | string | Delivery service regex ID. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``type`` | string | Delivery service regex type ID. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``typeName`` | string | Delivery service regex type name. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``pattern`` | string | Delivery service regex pattern. |
+ +------------------+--------+-------------------------------------------------------------------------+
+ | ``setNumber`` | string | The order in which the regex is evaluated for the delivery service. |
+ +------------------+--------+-------------------------------------------------------------------------+
+
+ **Response Example** ::
+
+ {
+ "response":{
+ "id": 852,
+ "type": 18,
+ "typeName": "HOST_REGEXP"
+ "pattern": ".*\.foo-bar\..*",
+ "setNumber": 0
+ },
+ "alerts":[
+ {
+ "level": "success",
+ "text": "Delivery service regex update was successful."
+ }
+ ]
+ }
+
+|
+
+**DELETE /api/1.2/deliveryservices/{:dsId}/regexes/{:id}**
+
+ Delete delivery service regex.
+
+ Authentication Required: Yes
+
+ Role(s) Required: Admin or Oper
+
+ **Request Route Parameters**
+
+ +-----------+----------+---------------------------------------------+
+ | Name | Required | Description |
+ +===========+==========+=============================================+
+ | ``dsId`` | yes | Delivery service id. |
+ +-----------+----------+---------------------------------------------+
+ | ``id`` | yes | Delivery service regex id. |
+ +-----------+----------+---------------------------------------------+
+
+ **Response Properties**
+
+ +-------------+--------+----------------------------------+
+ | Parameter | Type | Description |
+ +=============+========+==================================+
+ | ``alerts`` | array | A collection of alert messages. |
+ +-------------+--------+----------------------------------+
+ | ``>level`` | string | Success, info, warning or error. |
+ +-------------+--------+----------------------------------+
+ | ``>text`` | string | Alert message. |
+ +-------------+--------+----------------------------------+
+
+ **Response Example** ::
+
+ {
+ "alerts": [
+ {
+ "level": "success",
+ "text": "Delivery service regex delete was successful."
+ }
+ ],
+ }
+
+|
+
+
+
+
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6f01ad02/traffic_ops/app/lib/API/DeliveryServiceRegexes.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/API/DeliveryServiceRegexes.pm b/traffic_ops/app/lib/API/DeliveryServiceRegexes.pm
index 4688f3a..bb63b08 100644
--- a/traffic_ops/app/lib/API/DeliveryServiceRegexes.pm
+++ b/traffic_ops/app/lib/API/DeliveryServiceRegexes.pm
@@ -22,8 +22,9 @@ use UI::DeliveryService;
use Mojo::Base 'Mojolicious::Controller';
use Data::Dumper;
use Common::ReturnCodes qw(SUCCESS ERROR);
+use Validate::Tiny ':all';
-sub index {
+sub all {
my $self = shift;
my $rs;
@@ -60,4 +61,236 @@ sub index {
}
+sub index {
+ my $self = shift;
+ my $ds_id = $self->param('dsId');
+
+ my $ds = $self->db->resultset('Deliveryservice')->find( { id => $ds_id } );
+ if ( !defined($ds) ) {
+ return $self->not_found();
+ }
+
+ my %criteria;
+ $criteria{'deliveryservice'} = $ds_id;
+
+ my $rs_data = $self->db->resultset("DeliveryserviceRegex")->search( \%criteria, { order_by => 'me.set_number' } );
+ my @data = ();
+ while ( my $row = $rs_data->next ) {
+ push(
+ @data, {
+ "id" => $row->regex->id,
+ "pattern" => $row->regex->pattern,
+ "type" => $row->regex->type->id,
+ "typeName" => $row->regex->type->name,
+ "setNumber" => $row->set_number,
+ }
+ );
+ }
+ $self->success( \@data );
+}
+
+sub show {
+ my $self = shift;
+ my $ds_id = $self->param('dsId');
+ my $regex_id = $self->param('id');
+
+ my $ds_regex = $self->db->resultset('DeliveryserviceRegex')->search( { deliveryservice => $ds_id, regex => $regex_id } );
+ if ( !defined($ds_regex) ) {
+ return $self->not_found();
+ }
+
+ my %criteria;
+ $criteria{'deliveryservice'} = $ds_id;
+ $criteria{'regex'} = $regex_id;
+
+ my $rs_data = $self->db->resultset("DeliveryserviceRegex")->search( \%criteria );
+ my @data = ();
+ while ( my $row = $rs_data->next ) {
+ push(
+ @data, {
+ "id" => $row->regex->id,
+ "pattern" => $row->regex->pattern,
+ "type" => $row->regex->type->id,
+ "typeName" => $row->regex->type->name,
+ "setNumber" => $row->set_number,
+ }
+ );
+ }
+ $self->success( \@data );
+}
+
+sub create {
+ my $self = shift;
+ my $ds_id = $self->param('dsId');
+ my $params = $self->req->json;
+
+ if ( !&is_oper($self) ) {
+ return $self->forbidden();
+ }
+
+ my ( $is_valid, $result ) = $self->is_regex_valid($params);
+
+ if ( !$is_valid ) {
+ return $self->alert($result);
+ }
+
+ my $ds = $self->db->resultset('Deliveryservice')->find( { id => $ds_id } );
+ if ( !defined($ds) ) {
+ return $self->not_found();
+ }
+
+ my $values = {
+ pattern => $params->{pattern},
+ type => $params->{type},
+ };
+
+ my $rs_regex = $self->db->resultset('Regex')->create($values)->insert();
+ if ($rs_regex) {
+
+ # now insert the regex into the deliveryservice_regex table along with set number
+ my $rs_ds_regex = $self->db->resultset('DeliveryserviceRegex')
+ ->create( { deliveryservice => $ds_id, regex => $rs_regex->id, set_number => $params->{setNumber} } )->insert();
+
+ my $response;
+ $response->{id} = $rs_regex->id;
+ $response->{pattern} = $rs_regex->pattern;
+ $response->{type} = $rs_regex->type->id;
+ $response->{typeName} = $rs_regex->type->name;
+ $response->{setNumber} = $rs_ds_regex->set_number;
+
+ &log( $self, "Regex created [ " . $rs_regex->pattern . " ] for deliveryservice: " . $ds_id, "APICHANGE" );
+
+ return $self->success( $response, "Delivery service regex creation was successful." );
+ }
+ else {
+ return $self->alert("Delivery service regex creation failed.");
+ }
+
+}
+
+sub update {
+ my $self = shift;
+ my $ds_id = $self->param('dsId');
+ my $regex_id = $self->param('id');
+ my $params = $self->req->json;
+
+ if ( !&is_oper($self) ) {
+ return $self->forbidden();
+ }
+
+ my ( $is_valid, $result ) = $self->is_regex_valid($params);
+
+ if ( !$is_valid ) {
+ return $self->alert($result);
+ }
+
+ my $ds_regex = $self->db->resultset('DeliveryserviceRegex')->search( { deliveryservice => $ds_id, regex => $regex_id } );
+ if ( !defined($ds_regex) ) {
+ return $self->not_found();
+ }
+
+ my $values = {
+ pattern => $params->{pattern},
+ type => $params->{type},
+ };
+
+ my $regex = $self->db->resultset('Regex')->find( { id => $regex_id } )->update($values);
+ if ($regex) {
+
+ # now update the set_number in the deliveryservice_regex table
+ $ds_regex->update( { set_number => $params->{setNumber} } );
+
+ my $response;
+ $response->{id} = $regex->id;
+ $response->{pattern} = $regex->pattern;
+ $response->{type} = $regex->type->id;
+ $response->{typeName} = $regex->type->name;
+ $response->{setNumber} = $params->{setNumber};
+
+ &log( $self, "Regex updated [ " . $regex->pattern . " ] for deliveryservice: " . $ds_id, "APICHANGE" );
+
+ return $self->success( $response, "Delivery service regex update was successful." );
+ }
+ else {
+ return $self->alert("Delivery service regex update failed.");
+ }
+
+}
+
+sub delete {
+ my $self = shift;
+ my $ds_id = $self->param('dsId');
+ my $regex_id = $self->param('id');
+
+ if ( !&is_oper($self) ) {
+ return $self->forbidden();
+ }
+
+ my $ds_regex = $self->db->resultset('DeliveryserviceRegex')->search( { deliveryservice => $ds_id, regex => $regex_id } );
+ if ( !defined($ds_regex) ) {
+ return $self->not_found();
+ }
+
+ my $count = $self->db->resultset('RegexesForDeliveryService')->search( {}, { bind => [$ds_id] } )->count;
+ if ( $count < 2 ) {
+ return $self->alert("A delivery service must have at least one regex.");
+ }
+
+ my $regex = $self->db->resultset('Regex')->find( { id => $regex_id } )->delete();
+ if ($regex) {
+
+ # now delete the entry in the deliveryservice_regex table
+ $ds_regex->delete();
+
+ &log( $self, "Regex deleted [ " . $regex->pattern . " ] for deliveryservice: " . $ds_id, "APICHANGE" );
+
+ return $self->success_message("Delivery service regex delete was successful.");
+ }
+ else {
+ return $self->alert("Delivery service regex delete failed.");
+ }
+
+}
+
+sub is_regex_valid {
+ my $self = shift;
+ my $params = shift;
+
+ if ( !$self->is_valid_regex_type( $params->{type} ) ) {
+ return ( 0, "Invalid regex type" );
+ }
+
+ my $rules = {
+ fields => [qw/pattern type setNumber/],
+
+ # Validation checks to perform
+ checks => [
+ pattern => [ is_required("is required") ],
+ type => [ is_required("is required") ],
+ setNumber => [ is_required("is required") ],
+ ]
+ };
+
+ # Validate the input against the rules
+ my $result = validate( $params, $rules );
+
+ if ( $result->{success} ) {
+ return ( 1, $result->{data} );
+ }
+ else {
+ return ( 0, $result->{error} );
+ }
+}
+
+sub is_valid_regex_type {
+ my $self = shift;
+ my $type_id = shift;
+
+ my $rs = $self->db->resultset("Type")->find( { id => $type_id } );
+ if ( defined($rs) && ( $rs->use_in_table eq "regex" ) ) {
+ return 1;
+ }
+ return 0;
+}
+
1;
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6f01ad02/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm b/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm
index 1627636..7b25146 100644
--- a/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm
+++ b/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm
@@ -79,7 +79,7 @@ my %definition_for = (
using => {
deliveryservice => 100,
regex => 800,
- set_number => 0,
+ set_number => 1,
},
},
steering_2 => {
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6f01ad02/traffic_ops/app/lib/TrafficOpsRoutes.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/TrafficOpsRoutes.pm b/traffic_ops/app/lib/TrafficOpsRoutes.pm
index 8b7de9c..b3bd08c 100644
--- a/traffic_ops/app/lib/TrafficOpsRoutes.pm
+++ b/traffic_ops/app/lib/TrafficOpsRoutes.pm
@@ -539,7 +539,12 @@ sub api_routes {
->to( 'KeysUrlSig#view_by_xmlid', namespace => 'API::DeliveryService' );
# -- DELIVERY SERVICE: REGEXES
- $r->get("/api/$version/deliveryservices_regexes")->over( authenticated => 1 )->to( 'DeliveryServiceRegexes#index', namespace => $namespace );
+ $r->get("/api/$version/deliveryservices_regexes")->over( authenticated => 1 )->to( 'DeliveryServiceRegexes#all', namespace => $namespace );
+ $r->get("/api/$version/deliveryservices/:dsId/regexes")->over( authenticated => 1 )->to( 'DeliveryServiceRegexes#index', namespace => $namespace );
+ $r->get("/api/$version/deliveryservices/:dsId/regexes/:id")->over( authenticated => 1 )->to( 'DeliveryServiceRegexes#show', namespace => $namespace );
+ $r->post("/api/$version/deliveryservices/:dsId/regexes")->over( authenticated => 1 )->to( 'DeliveryServiceRegexes#create', namespace => $namespace );
+ $r->put("/api/$version/deliveryservices/:dsId/regexes/:id")->over( authenticated => 1 )->to( 'DeliveryServiceRegexes#update', namespace => $namespace );
+ $r->delete("/api/$version/deliveryservices/:dsId/regexes/:id")->over( authenticated => 1 )->to( 'DeliveryServiceRegexes#delete', namespace => $namespace );
# -- DELIVERY SERVICE: MATCHES
$r->get("/api/$version/deliveryservice_matches")->over( authenticated => 1 )->to( 'DeliveryServiceMatches#index', namespace => $namespace );
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6f01ad02/traffic_ops/app/t/api/1.2/deliveryservice_regex.t
----------------------------------------------------------------------
diff --git a/traffic_ops/app/t/api/1.2/deliveryservice_regex.t b/traffic_ops/app/t/api/1.2/deliveryservice_regex.t
index 07901aa..f69f203 100644
--- a/traffic_ops/app/t/api/1.2/deliveryservice_regex.t
+++ b/traffic_ops/app/t/api/1.2/deliveryservice_regex.t
@@ -40,11 +40,73 @@ Test::TestHelper->load_core_data($schema);
ok $t->post_ok( '/api/1.1/user/login', json => { u => Test::TestHelper::ADMIN_USER, p => Test::TestHelper::ADMIN_USER_PASSWORD } )->status_is(200),
'Log into the admin user?';
-ok $t->get_ok("/api/1.2/deliveryservices_regexes.json")->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } )
+ok $t->get_ok("/api/1.2/deliveryservices_regexes")->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } )
->json_has( '/response', 'has a response' )->json_is( '/response/0/dsName', 'steering-ds1' )->json_has( '/response/0/regexes/0/type', 'has a regex type' )
->json_is( '/response/1/dsName', 'steering-ds2' )
->json_has( '/response/1/regexes', 'has a second regex' )->json_has( '/response/7/regexes/0/type', 'has a second regex type' ), 'Query regexes';
+$t->get_ok("/api/1.2/deliveryservices/100/regexes")->status_is(200)->json_is( "/response/0/id", 200 )
+ ->json_is( "/response/0/pattern" => '.*\.foo\..*' )
+ ->json_is( "/response/0/type" => 19 )
+ ->json_is( "/response/0/typeName" => 'HOST_REGEXP' )
+ ->or( sub { diag $t->tx->res->content->asset->{content}; } );
+
+$t->get_ok("/api/1.2/deliveryservices/100/regexes")->status_is(200)->json_is( "/response/1/id", 800 )
+ ->json_is( "/response/1/pattern" => '.*\.steering-ds1\..*' )
+ ->json_is( "/response/1/type" => 19 )
+ ->json_is( "/response/1/typeName" => 'HOST_REGEXP' )
+ ->or( sub { diag $t->tx->res->content->asset->{content}; } );
+
+$t->get_ok("/api/1.2/deliveryservices/100/regexes/200")->status_is(200)->json_is( "/response/0/id", 200 )
+ ->json_is( "/response/0/pattern" => '.*\.foo\..*' )
+ ->json_is( "/response/0/type" => 19 )
+ ->json_is( "/response/0/typeName" => 'HOST_REGEXP' )
+ ->or( sub { diag $t->tx->res->content->asset->{content}; } );
+
+ok $t->put_ok('/api/1.2/deliveryservices/100/regexes/200' => {Accept => 'application/json'} => json => {
+ "pattern" => '.*\.foo-bar\..*',
+ "type" => 20,
+ "setNumber" => 22,
+ })
+ ->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } )
+ ->json_is( "/response/pattern" => '.*\.foo-bar\..*' )
+ ->json_is( "/response/type" => 20 )
+ ->json_is( "/response/typeName" => 'PATH_REGEXP' )
+ ->json_is( "/response/setNumber" => 22 )
+ ->json_is( "/alerts/0/level" => "success" )
+ , 'Did the delivery service regex update?';
+
+ok $t->delete_ok('/api/1.2/deliveryservices/100/regexes/200')->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } );
+
+ok $t->delete_ok('/api/1.2/deliveryservices/100/regexes/800')->status_is(400)->or( sub { diag $t->tx->res->content->asset->{content}; } )
+ ->json_is( "/alerts/0/level" => "error" )
+ ->json_is( "/alerts/0/text" => "A delivery service must have at least one regex." )
+ , 'Does the delivery service regex delete fail because each ds must have at least one regex?';;
+
+ok $t->post_ok('/api/1.2/deliveryservices/100/regexes' => {Accept => 'application/json'} => json => {
+ "pattern" => "foo.bar.com",
+ "type" => 19,
+ "setNumber" => 2,
+ })
+ ->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } )
+ ->json_is( "/response/pattern" => "foo.bar.com" )
+ ->json_is( "/response/type" => 19 )
+ ->json_is( "/response/typeName" => "HOST_REGEXP" )
+ ->json_is( "/response/setNumber" => 2 )
+ ->json_is( "/alerts/0/level" => "success" )
+ ->json_is( "/alerts/0/text" => "Delivery service regex creation was successful." )
+ , 'Is the delivery service regex created?';
+
+ok $t->post_ok('/api/1.2/deliveryservices/100/regexes' => {Accept => 'application/json'} => json => {
+ "pattern" => "foo2.bar.com",
+ "type" => 12,
+ "setNumber" => 2,
+ })
+ ->status_is(400)->or( sub { diag $t->tx->res->content->asset->{content}; } )
+ ->json_is( "/alerts/0/level" => "error" )
+ ->json_is( "/alerts/0/text" => "Invalid regex type" )
+ , 'Does the delivery service regex create fail due to bad regex type?';
+
ok $t->get_ok('/logout')->status_is(302)->or( sub { diag $t->tx->res->content->asset->{content}; } );
#NEGATIVE TESTING -- No Privs
@@ -52,7 +114,7 @@ ok $t->post_ok( '/api/1.1/user/login', json => { u => Test::TestHelper::PORTAL_U
'Log into the portal user?';
# Verify Permissions
-ok $t->get_ok("/api/1.2/deliveryservices_regexes.json")->status_is(403)->or( sub { diag $t->tx->res->content->asset->{content}; } );
+ok $t->get_ok("/api/1.2/deliveryservices_regexes")->status_is(403)->or( sub { diag $t->tx->res->content->asset->{content}; } );
ok $t->get_ok('/logout')->status_is(302)->or( sub { diag $t->tx->res->content->asset->{content}; } );
[3/3] incubator-trafficcontrol git commit: This closes #214
Posted by de...@apache.org.
This closes #214
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/9b0b3acb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/9b0b3acb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/9b0b3acb
Branch: refs/heads/master
Commit: 9b0b3acb3078fdcef25ca2b81637deb969acf573
Parents: 1005b37
Author: Dewayne Richardson <de...@apache.org>
Authored: Tue Jan 24 08:59:12 2017 -0700
Committer: Dewayne Richardson <de...@apache.org>
Committed: Tue Jan 24 08:59:12 2017 -0700
----------------------------------------------------------------------
----------------------------------------------------------------------
[2/3] incubator-trafficcontrol git commit: Merge branch 'regex-crud'
of https://github.com/mitchell852/incubator-trafficcontrol
Posted by de...@apache.org.
Merge branch 'regex-crud' of https://github.com/mitchell852/incubator-trafficcontrol
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/1005b379
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/1005b379
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/1005b379
Branch: refs/heads/master
Commit: 1005b3792aa8893c9fb367b1b3a6d07578f4def6
Parents: b55605b 6f01ad0
Author: Dewayne Richardson <de...@apache.org>
Authored: Tue Jan 24 08:59:11 2017 -0700
Committer: Dewayne Richardson <de...@apache.org>
Committed: Tue Jan 24 08:59:11 2017 -0700
----------------------------------------------------------------------
docs/source/development/traffic_ops.rst | 3 +-
.../v12/deliveryservice_regex.rst | 374 +++++++++++++++++++
.../app/lib/API/DeliveryServiceRegexes.pm | 235 +++++++++++-
.../app/lib/Fixtures/DeliveryserviceRegex.pm | 2 +-
traffic_ops/app/lib/TrafficOpsRoutes.pm | 7 +-
.../app/t/api/1.2/deliveryservice_regex.t | 66 +++-
6 files changed, 681 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/1005b379/traffic_ops/app/lib/TrafficOpsRoutes.pm
----------------------------------------------------------------------