Commit 0b04c8cf authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

moved tc-engine to meep-model + removed tc-engine REST API

parent f02a177f
Loading
Loading
Loading
Loading
+0 −23
Original line number Diff line number Diff line
# Swagger Codegen Ignore
# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen

# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.

# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:
#ApiClient.cs

# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux

# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux

# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md
+0 −1
Original line number Diff line number Diff line
2.3.1
 No newline at end of file
+0 −612
Original line number Diff line number Diff line
---
swagger: "2.0"
info:
  description: "Copyright (c) 2019  InterDigital Communications, Inc\nLicensed 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\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless 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.\n"
  version: "1.0.0"
  title: "MEEP TC controller API"
  license:
    name: "Apache 2.0"
    url: "http://www.apache.org/licenses/LICENSE-2.0"
basePath: "/v1"
tags:
- name: "Scenario Deployment"
schemes:
- "http"
consumes:
- "application/json"
produces:
- "application/json"
paths:
  /scenarios/active:
    get:
      tags:
      - "Scenario Deployment"
      summary: "Retrieve network characteristics for deployed scenario"
      description: ""
      operationId: "getNetworkCharacteristicsTable"
      produces:
      - "application/json"
      parameters: []
      responses:
        200:
          description: "OK"
          schema:
            type: "string"
        404:
          description: "Not found"
    post:
      tags:
      - "Scenario Deployment"
      summary: "Activate network characteristics for deployed scenario"
      description: ""
      operationId: "activateScenario"
      produces:
      - "application/json"
      parameters:
      - in: "body"
        name: "scenario"
        description: "Scenario to deploy"
        required: true
        schema:
          $ref: "#/definitions/Scenario"
        x-exportParamName: "Scenario"
      responses:
        200:
          description: "OK"
        400:
          description: "Bad request"
        404:
          description: "Not found"
    delete:
      tags:
      - "Scenario Deployment"
      summary: "Delete network characteristics for deployed scenario"
      description: ""
      operationId: "deleteNetworkCharacteristicsTable"
      produces:
      - "application/json"
      parameters: []
      responses:
        200:
          description: "OK"
        404:
          description: "Not found"
  /clients:
    post:
      tags:
      - "New client (sidecar)"
      summary: "Add new client to TC Controller database"
      description: ""
      operationId: "newClient"
      produces:
      - "application/json"
      parameters:
      - in: "body"
        name: "clientBasicInfo"
        description: "Client information"
        required: true
        schema:
          $ref: "#/definitions/ClientBasicInfo"
        x-exportParamName: "ClientBasicInfo"
      responses:
        200:
          description: "OK"
        400:
          description: "Bad request"
definitions:
  ClientBasicInfo:
    type: "object"
    properties:
      podId:
        type: "string"
        description: "Unique pod identifier"
      ip:
        type: "string"
        description: "IP address of the pod (client)"
    description: "Client basic information object"
    example:
      clientBasicInfo:
      - podId: "myPodName"
        ip: "10.32.0.13"
  Scenario:
    type: "object"
    properties:
      name:
        type: "string"
        description: "Unique scenario name"
      config:
        $ref: "#/definitions/ScenarioConfig"
      deployment:
        $ref: "#/definitions/Deployment"
    description: "Scenario object"
    example: {}
  ScenarioConfig:
    type: "object"
    properties:
      visualization:
        type: "string"
        description: "Visualization configuration"
      other:
        type: "string"
        description: "Other scenario configuration"
    description: "Scenario configuration"
    example:
      visualization: "visualization"
      other: "other"
  Deployment:
    type: "object"
    properties:
      interDomainLatency:
        type: "integer"
        description: "Latency in ms between domains"
      interDomainLatencyVariation:
        type: "integer"
        description: "Latency variation in ms between domains"
      interDomainThroughput:
        type: "integer"
        description: "The limit of the traffic supported between domains"
      interDomainPacketLoss:
        type: "number"
        format: "double"
        description: "Packet lost (in terms of percentage) between domains"
      meta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      userMeta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      domains:
        type: "array"
        items:
          $ref: "#/definitions/Domain"
    description: "Network deployment object"
    example: {}
  Domain:
    type: "object"
    properties:
      id:
        type: "string"
        description: "Unique domain ID"
      name:
        type: "string"
        description: "Domain name"
      type:
        type: "string"
        description: "Domain type"
        enum:
        - "OPERATOR"
        - "PUBLIC"
      interZoneLatency:
        type: "integer"
        description: "Latency in ms between zones within domain"
      interZoneLatencyVariation:
        type: "integer"
        description: "Latency variation in ms between zones within domain"
      interZoneThroughput:
        type: "integer"
        description: "The limit of the traffic supported between zones within the\
          \ domain"
      interZonePacketLoss:
        type: "number"
        format: "double"
        description: "Packet lost (in terms of percentage) between zones within the\
          \ domain"
      meta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      userMeta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      zones:
        type: "array"
        items:
          $ref: "#/definitions/Zone"
    description: "Operator domain object"
    example: {}
  Zone:
    type: "object"
    properties:
      id:
        type: "string"
        description: "Unique zone ID"
      name:
        type: "string"
        description: "Zone name"
      type:
        type: "string"
        description: "Zone type"
        enum:
        - "ZONE"
        - "COMMON"
      interFogLatency:
        type: "integer"
        description: "Latency in ms between fog nodes (or PoAs) within zone"
      interFogLatencyVariation:
        type: "integer"
        description: "Latency variation in ms between fog nodes (or PoAs) within zone"
      interFogThroughput:
        type: "integer"
        description: "The limit of the traffic supported between fog nodes (or PoAs)\
          \ within the zone"
      interFogPacketLoss:
        type: "number"
        format: "double"
        description: "Packet lost (in terms of percentage) between fog nodes (or PoAs)\
          \ within the zone"
      interEdgeLatency:
        type: "integer"
        description: "Latency in ms between edge nodes within zone"
      interEdgeLatencyVariation:
        type: "integer"
        description: "Latency variation in ms between edge nodes within zone"
      interEdgeThroughput:
        type: "integer"
        description: "The limit of the traffic supported between edge nodes within\
          \ the zone"
      interEdgePacketLoss:
        type: "number"
        format: "double"
        description: "Packet lost (in terms of percentage) between edge nodes within\
          \ the zone"
      edgeFogLatency:
        type: "integer"
        description: "Latency in ms between fog nodes (or PoAs) and edge nodes within\
          \ zone"
      edgeFogLatencyVariation:
        type: "integer"
        description: "Latency variation in ms between fog nodes (or PoAs) and edge\
          \ nodes within zone"
      edgeFogThroughput:
        type: "integer"
        description: "The limit of the traffic supported between fog nodes (or PoAs)\
          \ and edge nodes within the zone"
      edgeFogPacketLoss:
        type: "number"
        format: "double"
        description: "Packet lost (in terms of percentage) between fog nodes (or PoAs)\
          \ and edge nodes within the zone"
      meta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      userMeta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      networkLocations:
        type: "array"
        items:
          $ref: "#/definitions/NetworkLocation"
    description: "Logical zone (MEC network) object"
    example: {}
  NetworkLocation:
    type: "object"
    properties:
      id:
        type: "string"
        description: "Unique network location ID"
      name:
        type: "string"
        description: "Network location name"
      type:
        type: "string"
        description: "Network location type"
        enum:
        - "POA"
        - "DEFAULT"
      terminalLinkLatency:
        type: "integer"
        description: "Latency in ms for all terminal links within network location"
      terminalLinkLatencyVariation:
        type: "integer"
        description: "Latency variation in ms for all terminal links within network\
          \ location"
      terminalLinkThroughput:
        type: "integer"
        description: "The limit of the traffic supported for all terminal links within\
          \ the network location"
      terminalLinkPacketLoss:
        type: "number"
        format: "double"
        description: "Packet lost (in terms of percentage) for all terminal links\
          \ within the network location"
      meta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      userMeta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      physicalLocations:
        type: "array"
        items:
          $ref: "#/definitions/PhysicalLocation"
    description: "Logical network location object"
    example: {}
  PhysicalLocation:
    type: "object"
    properties:
      id:
        type: "string"
        description: "Unique physical location ID"
      name:
        type: "string"
        description: "Physical location name"
      type:
        type: "string"
        description: "Physical location type"
        enum:
        - "UE"
        - "FOG"
        - "EDGE"
        - "CN"
        - "DC"
      isExternal:
        type: "boolean"
        description: "true: Physical location is external to MEEP\nfalse: Physical\
          \ location is internal to MEEP"
      networkLocationsInRange:
        type: "array"
        items:
          type: "string"
          description: "Names of network locations within range of physical location"
      meta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      userMeta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      processes:
        type: "array"
        items:
          $ref: "#/definitions/Process"
      linkLatency:
        type: "integer"
        description: "Latency in ms between the physical location and the network\
          \ (wired interface, air interface)"
      linkLatencyVariation:
        type: "integer"
        description: "Latency variation in ms between the physical location and the\
          \ network (wired interface, air interface)"
      linkThroughput:
        type: "integer"
        description: "The limit of the traffic supported between the physical location\
          \ and the network (wired interface, air interface)"
      linkPacketLoss:
        type: "number"
        format: "double"
        description: "Packet lost (in terms of percentage) between the physical location\
          \ and the network (wired interface, air interface)"
    description: "Physical location object"
    example: {}
  Process:
    type: "object"
    properties:
      id:
        type: "string"
        description: "Unique process ID"
      name:
        type: "string"
        description: "Process name"
      type:
        type: "string"
        description: "Process type"
        enum:
        - "UE-APP"
        - "EDGE-APP"
        - "MEC-SVC"
        - "CLOUD-APP"
      isExternal:
        type: "boolean"
        description: "true: process is external to MEEP\nfalse: process is internal\
          \ to MEEP"
      image:
        type: "string"
        description: "Docker image to deploy inside MEEP"
      environment:
        type: "string"
        description: "Environment variables using the format NAME=\"value\",NAME=\"\
          value\",NAME=\"value\""
      commandArguments:
        type: "string"
        description: "Arguments to command executable"
      commandExe:
        type: "string"
        description: "Executable to invoke at container start up"
      serviceConfig:
        $ref: "#/definitions/ServiceConfig"
      gpuConfig:
        $ref: "#/definitions/GpuConfig"
      externalConfig:
        $ref: "#/definitions/ExternalConfig"
      status:
        type: "string"
        description: "Process status"
      userChartLocation:
        type: "string"
        description: "Chart location for the deployment of the chart provided by the\
          \ user"
      userChartAlternateValues:
        type: "string"
        description: "Chart values.yaml file location for the deployment of the chart\
          \ provided by the user"
      userChartGroup:
        type: "string"
        description: "Chart supplemental information related to the group (service)"
      meta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      userMeta:
        type: "object"
        description: "Key/Value Pair Map (string, string)"
        additionalProperties:
          type: "string"
      appLatency:
        type: "integer"
        description: "Latency in ms caused by the application"
      appLatencyVariation:
        type: "integer"
        description: "Latency variation in ms caused by the application"
      appThroughput:
        type: "integer"
        description: "The limit of the traffic supported by the application"
      appPacketLoss:
        type: "number"
        format: "double"
        description: "Packet lost (in terms of percentage) caused by the application"
      placementId:
        type: "string"
        description: "Identifier used for process placement in AdvantEDGE cluster"
    description: "Application or service object"
    example: {}
  ServiceConfig:
    type: "object"
    properties:
      name:
        type: "string"
        description: "Unique service name"
      meSvcName:
        type: "string"
        description: "Multi-Edge service name, if any"
      ports:
        type: "array"
        items:
          $ref: "#/definitions/ServicePort"
    description: "Service object"
    example: {}
  ServicePort:
    type: "object"
    properties:
      protocol:
        type: "string"
        description: "Protocol that the application is using (TCP or UDP)"
      port:
        type: "integer"
        description: "Port number that the service is listening on"
      externalPort:
        type: "integer"
        description: "External port number on which to expose the application (30000\
          \ - 32767)  <li>Only one application allowed per external port <li>Scenario\
          \ builder must configure to prevent conflicts\n"
    description: "Service port object"
    example: {}
  GpuConfig:
    type: "object"
    properties:
      type:
        type: "string"
        description: "Requested GPU type"
      count:
        type: "integer"
        description: "Number of GPUs requested"
    description: "GPU configuration object"
  ExternalConfig:
    type: "object"
    properties:
      ingressServiceMap:
        type: "array"
        items:
          $ref: "#/definitions/IngressService"
      egressServiceMap:
        type: "array"
        items:
          $ref: "#/definitions/EgressService"
    description: "External Process configuration.\nNOTE: Only valid if 'isExternal'\
      \ is set."
    example: {}
  IngressService:
    type: "object"
    properties:
      name:
        type: "string"
        description: "Service name (unique or multi-edge)"
      port:
        type: "integer"
        description: "Internal service port number"
      externalPort:
        type: "integer"
        description: "Externally-exposed unique service port in range (30000 - 32767)"
      protocol:
        type: "string"
        description: "Service protocol (TCP or UDP)"
    description: "Internal service exposed externally via specific port"
  EgressService:
    type: "object"
    properties:
      name:
        type: "string"
        description: "Service name"
      meSvcName:
        type: "string"
        description: "Multi-Edge service name, if any"
      ip:
        type: "string"
        description: "External node IP address"
      port:
        type: "integer"
        description: "Service port number"
      protocol:
        type: "string"
        description: "Service protocol (TCP or UDP)"
    description: "External service exposed internally via specific port"
parameters:
  Path.PodId:
    name: "podId"
    in: "path"
    description: "Identity of a pod, refered to as pod name"
    required: true
    type: "string"
responses:
  Std200:
    description: "OK"
  Std201:
    description: "Created"
  Std202:
    description: "Accepted"
  Std204:
    description: "No content"
  Std304:
    description: "Not modified"
  Std400:
    description: "Bad request"
  Std401:
    description: "Not authorized"
  Std403:
    description: "Forbidden"
  Std404:
    description: "Not found"
  Std409:
    description: "Conflict"
  Std416:
    description: "Requested range not satisfiable"
  Std500:
    description: "Internal server error"
externalDocs:
  description: "Find out more about MEEP TC controller API"
  url: "http://www.localinfo/pdf"
+3 −1
Original line number Diff line number Diff line
@@ -7,13 +7,14 @@ require (
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-manager-model v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model v0.0.0-00010101000000-000000000000
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis v0.0.0
	github.com/gogo/protobuf v1.2.1 // indirect
	github.com/google/btree v1.0.0 // indirect
	github.com/google/gofuzz v1.0.0 // indirect
	github.com/googleapis/gnostic v0.2.0 // indirect
	github.com/gorilla/handlers v1.4.0
	github.com/gorilla/mux v1.7.1
	github.com/gorilla/mux v1.7.3
	github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc // indirect
	github.com/json-iterator/go v1.1.6 // indirect
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
@@ -37,5 +38,6 @@ replace (
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-ctrl-engine-model => ../../go-packages/meep-ctrl-engine-model
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger => ../../go-packages/meep-logger
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mg-manager-model => ../../go-packages/meep-mg-manager-model
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-model => ../../go-packages/meep-model
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis => ../../go-packages/meep-redis
)
+10 −0
Original line number Diff line number Diff line
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/InterDigitalInc/AdvantEDGE v1.2.0 h1:46Mr4OqKz/6WU/1CziSacw62Z3pc52dgSOLppB5N/Bc=
github.com/KromDaniel/jonson v0.0.0-20180630143114-d2f9c3c389db/go.mod h1:RU+6d0CNIRSp6yo1mXLIIrnFa/3LHhvcDVLVJyovptM=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351 h1:1u1XrfCBnY+GijnyU6O1k4odp5TnqZQTsp5v7+n/E4Y=
github.com/KromDaniel/rejonson v0.0.0-20180822072824-00b5bcf2b351/go.mod h1:HxwfbuElTuGf+/uKZfjJrCnv0BmmpkPJDI7gBwj1KkM=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/flimzy/kivik v1.8.1/go.mod h1:S2aPycbG0eDFll4wgXt9uacSNkXISPufutnc9sv+mdA=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-kivik/couchdb v1.8.1/go.mod h1:5XJRkAMpBlEVA4q0ktIZjUPYBjoBmRoiWvwUBzP3BOQ=
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
@@ -20,9 +24,12 @@ github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZs
github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.7.1 h1:Dw4jY2nghMMRsh1ol8dv1axHkDwMQK2DHerMNJsIpJU=
github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc h1:f8eY6cV/x1x+HLjOp4r72s/31/V2aTUtg5oKRRPf8/Q=
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
@@ -40,11 +47,14 @@ github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a h1:Igim7XhdOpBnWPuYJ70XcNpq8q3BCACtVgNfoJxOV7g=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
Loading