×
Traktatov.net » Как тестируют в Google » Читать онлайн
Страница 38 из 192 Настройки

message  AddUrlRequest  {

   required  string  uri  =  1;            //  The  URI  entered  by  user.

   optional  string  comment  =  2;    //  Comments  made  by  the  user.

}

Написав файл addurl.proto, разработчик переходит к созданию правила сборки proto_library, которое генерирует исходные файлы C++, определяющие сущности из addurl.proto, и компилирует их в статическую библиотеку addurl C++. С дополнительными параметрами можно сгенерировать исходный код для языков Java и Python.

File: depot/addurl/BUILD

proto_library(name="addurl",

                           srcs=["addurl.proto"])

Разработчик запускает систему сборки и исправляет все проблемы, обнаруженные ею в addurl.proto и в файле BUILD. Система сборки вызывает компилятор Protocol Buffers, генерирует исходные файлы addurl.pb.h и addurl.pb.cc и статическую библиотеку addurl, которую теперь можно подключить.

Пора писать AddUrlFrontend. Для этого мы объявляем класс AddUrlFrontend в новом файле addurl_frontend.h. Этот код в основном шаблонный.

File: depot/addurl/addurl_frontend.h

#ifndef  ADDURL_ADDURL_FRONTEND_H_

#define  ADDURL_ADDURL_FRONTEND_H_

//  Forward-declaration  of  dependencies.

class  AddUrlService;

class  HTTPRequest;

class  HTTPReply;

//  Frontend  for  the  AddUrl  system.

//  Accepts  HTTP  requests  from  web  clients,

//  and  forwards  well-formed  requests  to  the  backend.

class  AddUrlFrontend  {

   public:

           //  Constructor  which  enables  injection  of  an

           //  AddUrlService  dependency.

       explicit  AddUrlFrontend(AddUrlService*  add_url_service);

       ~AddUrlFrontend();

       //  Method  invoked  by  our  HTTP  server  when  a  request  arrives

       //  for  the  /addurl  resource.

       void  HandleAddUrlFrontendRequest(const  HTTPRequest*  http_request,

                                                                         HTTPReply*  http_reply);

   private:

       AddUrlService*  add_url_service_;

       //  Declare  copy  constructor  and  operator=  private  to  prohibit

       //  unintentional  copying  of  instances  of  this  class.

       AddUrlFrontend(const  AddUrlFrontend&);

       AddUrlFrontend&  operator=(const  AddUrlFrontend&  rhs);

   };

#endif  //  ADDURL_ADDURL_FRONTEND_H_

Продолжая определять классы AddUrlFrontend, разработчик создает файл addurl_frontend.cc, в котором описывает класс AddUrlFrontend. Для экономии места мы опустили часть файла.

File: depot/addurl/addurl_frontend.cc

#include  "addurl/addurl_frontend.h"

#include  "addurl/addurl.pb.h"

#include  "path/to/httpqueryparams.h"

//  Functions  used  by  HandleAddUrlFrontendRequest()  below,  but

//  whose  definitions  are  omitted  for  brevity.

void  ExtractHttpQueryParams(const  HTTPRequest*  http_request,

                                                       HTTPQueryParams*  query_params);

void  WriteHttp200Reply(HTTPReply*  reply);

void  WriteHttpReplyWithErrorDetails(

       HTTPReply*  http_reply,  const  AddUrlReply&  add_url_reply);

//  AddUrlFrontend  constructor  that  injects  the  AddUrlService