Skip to content

Commit

Permalink
Update gun to 2.0 (#301)
Browse files Browse the repository at this point in the history
* Update gun and add a cowlib override temporary

* chore: update deps

* chore: ensure ca files are present

* Use certs_keys for TLS compatibility with OTP >= 25

* fix: verify_none

* fix: use factory

* fix: use same cred

* chore: remove unused var

* more verify_none

* chore: format

* chore: attempt to pass test

* chore: format

* chore: use erlang 25.1.x

* Apply suggestions from code review

* docs: remove notice from ToC

---------

Co-authored-by: Paulo Valente <16843419+polvalente@users.noreply.github.com>
  • Loading branch information
carrascoacd and polvalente authored May 8, 2023
1 parent 4eaf042 commit fc0b9bb
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 62 deletions.
22 changes: 10 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- uses: actions/checkout@v3
- uses: erlef/setup-beam@v1
with:
otp-version: 25
otp-version: 25.1.x
elixir-version: 1.14.x
- name: Retrieve dependencies cache
uses: actions/cache@v3
Expand All @@ -28,18 +28,17 @@ jobs:
run: mix deps.get 1>/dev/null
- name: Check format
run: mix format --check-formatted

tests:
runs-on: ubuntu-20.04
name: OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
strategy:
matrix:
otp: [22.x, 23.x, 24.x, 25.x]
otp: [22.x, 23.x, 24.x, 25.1.x]
elixir: [1.11.x, 1.12.x, 1.13.x, 1.14.x]
exclude:
- otp: 25.x
- otp: 25.1.x
elixir: 1.11.x
- otp: 25.x
- otp: 25.1.x
elixir: 1.12.x
- otp: 22.x
elixir: 1.14.x
Expand All @@ -60,7 +59,6 @@ jobs:
run: mix deps.get 1>/dev/null
- name: Run Tests
run: mix test

interop-tests:
runs-on: ubuntu-20.04
name: Interop tests
Expand All @@ -70,7 +68,7 @@ jobs:
- uses: actions/checkout@v3
- uses: erlef/setup-beam@v1
with:
otp-version: 25.x
otp-version: 25.1.x
elixir-version: 1.14.x
- name: Retrieve dependencies cache
uses: actions/cache@v3
Expand All @@ -92,12 +90,12 @@ jobs:
if: ${{ github.ref == 'refs/heads/master' }}
strategy:
matrix:
otp: [22.x, 23.x, 24.x, 25.x]
otp: [22.x, 23.x, 24.x, 25.1.x]
elixir: [1.11.x, 1.12.x, 1.13.x, 1.14.x]
exclude:
- otp: 25.x
- otp: 25.1.x
elixir: 1.11.x
- otp: 25.x
- otp: 25.1.x
elixir: 1.12.x
- otp: 22.x
elixir: 1.14.x
Expand Down Expand Up @@ -125,7 +123,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
otp: [24.x, 25.x]
otp: [24.x, 25.1.x]
elixir: [1.14.x]
env:
MIX_ENV: test
Expand Down Expand Up @@ -159,7 +157,7 @@ jobs:
- uses: actions/checkout@v3
- uses: erlef/setup-beam@v1
with:
otp-version: 25.x
otp-version: 25.1.x
elixir-version: 1.14.x
- name: Retrieve dependencies cache
uses: actions/cache@v3
Expand Down
6 changes: 0 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,12 @@ An Elixir implementation of [gRPC](http://www.grpc.io/).

## Table of contents

- [Notice](#notice)
- [Installation](#installation)
- [Usage](#usage)
- [Features](#features)
- [Benchmark](#benchmark)
- [Contributing](#contributing)

## Notice
> __Note__
> The [Gun](https://github.com/ninenines/gun) library doesn't have a full 2.0 release yet, so we depend on `:grcp_gun 2.0.1` for now.
This is the same as `:gun 2.0.0-rc.2`, but [Hex](https://hex.pm/) doesn't let us depend on RC versions for releases.

## Installation

The package can be installed as:
Expand Down
10 changes: 4 additions & 6 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,12 @@ defmodule GRPC.Mixfile do

defp deps do
[
{:cowboy, "~> 2.9"},
# This is the same as :gun 2.0.0-rc.2,
# but we can't depend on an RC for releases
{:gun, "~> 2.0.1", hex: :grpc_gun},
{:cowboy, "~> 2.10"},
{:gun, "~> 2.0"},
{:mint, "~> 1.4.2"},
{:cowlib, "~> 2.11"},
{:cowlib, "~> 2.12"},
{:protobuf, "~> 0.11", only: [:dev, :test]},
{:ex_doc, "~> 0.28.0", only: :dev},
{:ex_doc, "~> 0.28.6", only: :dev},
{:dialyxir, "~> 1.1.0", only: [:dev, :test], runtime: false},
{:ex_parameterized, "~> 1.3.7", only: :test}
]
Expand Down
14 changes: 7 additions & 7 deletions mix.lock
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
%{
"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"},
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
"cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"},
"cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"},
"dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"},
"earmark_parser": {:hex, :earmark_parser, "1.4.26", "f4291134583f373c7d8755566122908eb9662df4c4b63caa66a0eabe06569b0a", [:mix], [], "hexpm", "48d460899f8a0c52c5470676611c01f64f3337bad0b26ddab43648428d94aabc"},
"earmark_parser": {:hex, :earmark_parser, "1.4.32", "fa739a0ecfa34493de19426681b23f6814573faee95dfd4b4aafe15a7b5b32c6", [:mix], [], "hexpm", "b8b0dd77d60373e77a3d7e8afa598f325e49e8663a51bcc2b88ef41838cca755"},
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"ex_doc": {:hex, :ex_doc, "0.28.4", "001a0ea6beac2f810f1abc3dbf4b123e9593eaa5f00dd13ded024eae7c523298", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bf85d003dd34911d89c8ddb8bda1a958af3471a274a4c2150a9c01c78ac3f8ed"},
"ex_doc": {:hex, :ex_doc, "0.28.6", "2bbd7a143d3014fc26de9056793e97600ae8978af2ced82c2575f130b7c0d7d7", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bca1441614654710ba37a0e173079273d619f9160cbcc8cd04e6bd59f1ad0e29"},
"ex_parameterized": {:hex, :ex_parameterized, "1.3.7", "801f85fc4651cb51f11b9835864c6ed8c5e5d79b1253506b5bb5421e8ab2f050", [:mix], [], "hexpm", "1fb0dc4aa9e8c12ae23806d03bcd64a5a0fc9cd3f4c5602ba72561c9b54a625c"},
"gun": {:hex, :grpc_gun, "2.0.1", "221b792df3a93e8fead96f697cbaf920120deacced85c6cd3329d2e67f0871f8", [:rebar3], [{:cowlib, "~> 2.11", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "795a65eb9d0ba16697e6b0e1886009ce024799e43bb42753f0c59b029f592831"},
"gun": {:hex, :gun, "2.0.1", "160a9a5394800fcba41bc7e6d421295cf9a7894c2252c0678244948e3336ad73", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "a10bc8d6096b9502205022334f719cc9a08d9adcfbfc0dbee9ef31b56274a20b"},
"hpax": {:hex, :hpax, "0.1.2", "09a75600d9d8bbd064cdd741f21fc06fc1f4cf3d0fcc335e5aa19be1a7235c84", [:mix], [], "hexpm", "2c87843d5a23f5f16748ebe77969880e29809580efdaccd615cd3bed628a8c13"},
"jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"},
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
"makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"},
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
"mint": {:hex, :mint, "1.4.2", "50330223429a6e1260b2ca5415f69b0ab086141bc76dc2fbf34d7c389a6675b2", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "ce75a5bbcc59b4d7d8d70f8b2fc284b1751ffb35c7b6a6302b5192f8ab4ddd80"},
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
"nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
"protobuf": {:hex, :protobuf, "0.11.0", "58d5531abadea3f71135e97bd214da53b21adcdb5b1420aee63f4be8173ec927", [:mix], [{:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "30ad9a867a5c5a0616cac9765c4d2c2b7b0030fa81ea6d0c14c2eb5affb6ac52"},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
}
12 changes: 7 additions & 5 deletions test/grpc/client/adapters/gun_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,7 @@ defmodule GRPC.Client.Adapters.GunTest do

%{
port: port,
credential:
build(:credential,
ssl: Keyword.take(server_credential.ssl, [:certfile, :keyfile, :versions])
)
credential: server_credential
}
end

Expand Down Expand Up @@ -67,7 +64,11 @@ defmodule GRPC.Client.Adapters.GunTest do
# Ensure that it works
assert {:ok, result} =
Gun.connect(channel,
transport_opts: [certfile: credential.ssl[:certfile], ip: :loopback]
transport_opts: [
verify: :verify_none,
certfile: credential.ssl[:certfile],
ip: :loopback
]
)

assert %{channel | adapter_payload: %{conn_pid: result.adapter_payload.conn_pid}} == result
Expand All @@ -77,6 +78,7 @@ defmodule GRPC.Client.Adapters.GunTest do
Gun.connect(channel,
transport_opts: [
certfile: credential.ssl[:certfile] <> "invalidsuffix",
verify: :verify_peer,
ip: :loopback
]
)
Expand Down
25 changes: 2 additions & 23 deletions test/grpc/integration/connection_test.exs
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
defmodule GRPC.Integration.ConnectionTest do
use GRPC.Integration.TestCase

@cert_path Path.expand("./tls/server1.pem", :code.priv_dir(:grpc))
@key_path Path.expand("./tls/server1.key", :code.priv_dir(:grpc))
@ca_path Path.expand("./tls/ca.pem", :code.priv_dir(:grpc))

test "reconnection works" do
server = FeatureServer
{:ok, _, port} = GRPC.Server.start(server, 0)
Expand Down Expand Up @@ -33,31 +29,14 @@ defmodule GRPC.Integration.ConnectionTest do
test "authentication works" do
server = FeatureServer

tls_versions = [:"tlsv1.2"]

cred =
GRPC.Credential.new(
ssl: [
certfile: @cert_path,
cacertfile: @ca_path,
keyfile: @key_path,
verify: :verify_peer,
fail_if_no_peer_cert: true,
versions: tls_versions
]
)
cred = GRPC.Factory.build(:credential, verify: :verify_peer)

{:ok, _, port} = GRPC.Server.start(server, 0, cred: cred)

try do
point = Routeguide.Point.new(latitude: 409_146_138, longitude: -746_188_906)

client_cred =
GRPC.Credential.new(
ssl: [certfile: @cert_path, keyfile: @key_path, versions: tls_versions]
)

{:ok, channel} = GRPC.Stub.connect("localhost:#{port}", cred: client_cred)
{:ok, channel} = GRPC.Stub.connect("localhost:#{port}", cred: cred)
assert {:ok, _} = Routeguide.RouteGuide.Stub.get_feature(channel, point)
catch
error ->
Expand Down
7 changes: 4 additions & 3 deletions test/support/factory.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@ defmodule GRPC.Factory do
def build(resource, attrs \\ %{}) do
name = :"#{resource}_factory"

attrs = Map.new(attrs)

data =
if function_exported?(__MODULE__, name, 1) do
apply(__MODULE__, name, [attrs])
else
apply(__MODULE__, name, [])
end

Map.merge(data, Map.new(attrs))
Map.merge(data, attrs)
end

def channel_factory do
Expand Down Expand Up @@ -43,8 +45,7 @@ defmodule GRPC.Factory do
certfile: cert_path,
cacertfile: ca_path,
keyfile: key_path,
verify: :verify_peer,
fail_if_no_peer_cert: true,
verify: :verify_none,
versions: [:"tlsv1.2"]
]
}
Expand Down

0 comments on commit fc0b9bb

Please sign in to comment.