Coverage Report

Created: 2024-09-19 09:45

/proc/self/cwd/source/common/grpc/status.cc
Line
Count
Source (jump to first uncovered line)
1
#include "source/common/grpc/status.h"
2
3
namespace Envoy {
4
namespace Grpc {
5
6
2.78k
Status::GrpcStatus Utility::httpToGrpcStatus(uint64_t http_response_status) {
7
  // From
8
  // https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
9
2.78k
  switch (http_response_status) {
10
1.19k
  case 400:
11
1.19k
    return Status::WellKnownGrpcStatus::Internal;
12
92
  case 401:
13
92
    return Status::WellKnownGrpcStatus::Unauthenticated;
14
86
  case 403:
15
86
    return Status::WellKnownGrpcStatus::PermissionDenied;
16
340
  case 404:
17
340
    return Status::WellKnownGrpcStatus::Unimplemented;
18
76
  case 429:
19
162
  case 502:
20
271
  case 503:
21
299
  case 504:
22
299
    return Status::WellKnownGrpcStatus::Unavailable;
23
774
  default:
24
774
    return Status::WellKnownGrpcStatus::Unknown;
25
2.78k
  }
26
2.78k
}
27
28
102
uint64_t Utility::grpcToHttpStatus(Status::GrpcStatus grpc_status) {
29
  // From https://cloud.google.com/apis/design/errors#handling_errors.
30
102
  switch (grpc_status) {
31
101
  case Status::WellKnownGrpcStatus::Ok:
32
101
    return 200;
33
0
  case Status::WellKnownGrpcStatus::Canceled:
34
    // Client closed request.
35
0
    return 499;
36
0
  case Status::WellKnownGrpcStatus::Unknown:
37
    // Internal server error.
38
0
    return 500;
39
1
  case Status::WellKnownGrpcStatus::InvalidArgument:
40
    // Bad request.
41
1
    return 400;
42
0
  case Status::WellKnownGrpcStatus::DeadlineExceeded:
43
    // Gateway Time-out.
44
0
    return 504;
45
0
  case Status::WellKnownGrpcStatus::NotFound:
46
    // Not found.
47
0
    return 404;
48
0
  case Status::WellKnownGrpcStatus::AlreadyExists:
49
    // Conflict.
50
0
    return 409;
51
0
  case Status::WellKnownGrpcStatus::PermissionDenied:
52
    // Forbidden.
53
0
    return 403;
54
0
  case Status::WellKnownGrpcStatus::ResourceExhausted:
55
    //  Too many requests.
56
0
    return 429;
57
0
  case Status::WellKnownGrpcStatus::FailedPrecondition:
58
    // Bad request.
59
0
    return 400;
60
0
  case Status::WellKnownGrpcStatus::Aborted:
61
    // Conflict.
62
0
    return 409;
63
0
  case Status::WellKnownGrpcStatus::OutOfRange:
64
    // Bad request.
65
0
    return 400;
66
0
  case Status::WellKnownGrpcStatus::Unimplemented:
67
    // Not implemented.
68
0
    return 501;
69
0
  case Status::WellKnownGrpcStatus::Internal:
70
    // Internal server error.
71
0
    return 500;
72
0
  case Status::WellKnownGrpcStatus::Unavailable:
73
    // Service unavailable.
74
0
    return 503;
75
0
  case Status::WellKnownGrpcStatus::DataLoss:
76
    // Internal server error.
77
0
    return 500;
78
0
  case Status::WellKnownGrpcStatus::Unauthenticated:
79
    // Unauthorized.
80
0
    return 401;
81
0
  case Status::WellKnownGrpcStatus::InvalidCode:
82
0
  default:
83
    // Internal server error.
84
0
    return 500;
85
102
  }
86
102
}
87
88
0
std::string Utility::grpcStatusToString(Status::GrpcStatus grpc_status) {
89
0
  switch (grpc_status) {
90
0
  case Status::WellKnownGrpcStatus::Ok:
91
0
    return "OK";
92
0
  case Status::WellKnownGrpcStatus::Canceled:
93
0
    return "Canceled";
94
0
  case Status::WellKnownGrpcStatus::Unknown:
95
0
    return "Unknown";
96
0
  case Status::WellKnownGrpcStatus::InvalidArgument:
97
0
    return "InvalidArgument";
98
0
  case Status::WellKnownGrpcStatus::DeadlineExceeded:
99
0
    return "DeadlineExceeded";
100
0
  case Status::WellKnownGrpcStatus::NotFound:
101
0
    return "NotFound";
102
0
  case Status::WellKnownGrpcStatus::AlreadyExists:
103
0
    return "AlreadyExists";
104
0
  case Status::WellKnownGrpcStatus::PermissionDenied:
105
0
    return "PermissionDenied";
106
0
  case Status::WellKnownGrpcStatus::ResourceExhausted:
107
0
    return "ResourceExhausted";
108
0
  case Status::WellKnownGrpcStatus::FailedPrecondition:
109
0
    return "FailedPrecondition";
110
0
  case Status::WellKnownGrpcStatus::Aborted:
111
0
    return "Aborted";
112
0
  case Status::WellKnownGrpcStatus::OutOfRange:
113
0
    return "OutOfRange";
114
0
  case Status::WellKnownGrpcStatus::Unimplemented:
115
0
    return "Unimplemented";
116
0
  case Status::WellKnownGrpcStatus::Internal:
117
0
    return "Internal";
118
0
  case Status::WellKnownGrpcStatus::Unavailable:
119
0
    return "Unavailable";
120
0
  case Status::WellKnownGrpcStatus::DataLoss:
121
0
    return "DataLoss";
122
0
  case Status::WellKnownGrpcStatus::Unauthenticated:
123
0
    return "Unauthenticated";
124
0
  case Status::WellKnownGrpcStatus::InvalidCode:
125
0
  default:
126
0
    return "InvalidCode";
127
0
  }
128
0
}
129
130
} // namespace Grpc
131
} // namespace Envoy