Giter Site home page Giter Site logo

lhttpc's Introduction

erlcloud: AWS APIs library for Erlang

Build Status Hex.pm Hex.pm

This library is not developed or maintained by AWS thus lots of functionality is still missing comparing to aws-cli or boto. Required functionality is being added upon request.

Service APIs implemented:

  • Amazon Elastic Compute Cloud (EC2)
  • Amazon EC2 Container Service (ECS)
  • Amazon Simple Storage Service (S3)
  • Amazon Simple Queue Service (SQS)
  • Amazon SimpleDB
  • Amazon Mechanical Turk
  • Amazon CloudWatch (MON)
  • Amazon CloudSearch
  • Amazon Inspector
  • Amazon Key Management Service (KMS)
  • Amazon DirectConnect
  • Amazon DynamoDB & DDB streams (ddb2)
  • Amazon Autoscaling (AS)
  • Amazon CloudTrail (CT)
  • Cloud Formation (CFN)
  • Config
  • ElasticLoadBalancing (ELB)
  • Identity and Access Management (IAM)
  • Kinesis
  • Glue (Catalog table, Crawlers and Job APIs support)
  • Athena
  • Step Functions (SF)
  • CloudWatch
  • MechanicalTurk
  • Simple DB (SDB)
  • Relational Data Service (RDS)
  • Simple Email Service (SES)
  • Short Token Service (STS)
  • Simple Notification Service (SNS)
  • Web Application Firewall (WAF)
  • AWS Cost and Usage Report API
  • AWS Secrets Manager
  • AWS Systems Manager (SSM)
  • and more to come

The majority of API functions have been implemented. Not all functions have been thoroughly tested, so exercise care when integrating this library into production code. Please send issues and patches.

The libraries can be used two ways. You can:

  • specify configuration parameters in the process dictionary. Useful for simple tasks, or
  • create a configuration object and pass that to each request as the final parameter. Useful for Cross AWS Account access

Roadmap

Below is the library roadmap update along with regular features and fixes.

  • 3.0.X

    • Remove R16 support done
    • Support maps
  • 3.X.X

    • Fix dialyzer findings and make it mandatory for the library
    • Only SigV4 signing and generalised in one module. Keep SigV2 in SBD section only
    • No more erlang:error() use and use of regular tuples as error API. Breaking change.

Major API compatibility changes between 0.13.X and 2.0.x

  • ELB APIs
  • ... list to be filled shortly

Supported Erlang versions

At the moment we support the following OTP releases:

  • 19.3
  • 20.3
  • 21.3
  • 22.3

It might still work on 17+ (primarily due to Erlang maps) but we do not guarantee that.

Getting started

You need to clone the repository and download rebar/rebar3 (if it's not already available in your path).

git clone https://github.com/erlcloud/erlcloud.git
cd erlcloud
wget https://s3.amazonaws.com/rebar3/rebar3
chmod a+x rebar3

To compile and run erlcloud:

make
make run

To use erlcloud in your application, add it as a dependency in your application's configuration file. erlcloud is also available as a Hex package, refer to the Hex mix usage docs or rebar3 usage docs for more help including dependencies using Hex syntax.

To use erlcloud in the shell, you can start it by calling:

application:ensure_all_started(erlcloud).

Using Temporary Security Credentials

When access to AWS resources is managed through third-party identity providers it is performed using temporary security credentials.

You can provide your AWS credentials in OS environment variables

export AWS_ACCESS_KEY_ID=<Your AWS Access Key>
export AWS_SECRET_ACCESS_KEY=<Your AWS Secret Access Key>
export AWS_SESSION_TOKEN=<Your AWS Security Token>
export AWS_DEFAULT_REGION=<Your region>

If you did not provide your AWS credentials in the OS environment variables, then you need to provide configuration read from your profile:

{ok, Conf} = erlcloud_aws:profile().
erlcloud_s3:list_buckets(Conf).

Or you can provide them via erlcloud application environment variables.

application:set_env(erlcloud, aws_access_key_id, "your key"),
application:set_env(erlcloud, aws_secret_access_key, "your secret key"),
application:set_env(erlcloud, aws_security_token, "your token"),
application:set_env(erlcloud, aws_region, "your region"),

Using Access Key

You can provide your AWS credentials in environmental variables.

export AWS_ACCESS_KEY_ID=<Your AWS Access Key>
export AWS_SECRET_ACCESS_KEY=<Your AWS Secret Access Key>

If you did not provide your AWS credentials in the environment variables, then you need to provide the per-process configuration:

erlcloud_ec2:configure(AccessKeyId, SecretAccessKey [, Hostname]).

Hostname defaults to non-existing "ec2.amazonaws.com" intentionally to avoid mix with US-East-1 Refer to aws_config for full description of all services configuration.

Configuration object usage:

EC2 = erlcloud_ec2:new(AccessKeyId, SecretAccessKey [, Hostname])
erlcloud_ec2:describe_images(EC2).

aws_config

The aws_config record contains many valuable defaults, such as protocols and ports for AWS services. You can always redefine them by making new #aws_config{} record and changing particular fields, then passing the result to any erlcloud function.

But if you want to change something in runtime this might be tedious and/or not flexible enough.

An alternative approach is to set default fields within the app.config -> erlcloud -> aws_config section and rely on the config, used by all functions by default.

Example of such app.config:

[
  {erlcloud, [
      {aws_config, [
          {s3_scheme, "http://"},
          {s3_host, "s3.example.com"}
      ]}
  ]}
].

VPC endpoints

If you want to utilise AZ affinity for VPC endpoints you can configure those in application config via:

{erlcloud, [
    {services_vpc_endpoints, [
        {<<"sqs">>, [<<"myAZ1.sqs-dns.amazonaws.com">>, <<"myAZ2.sqs-dns.amazonaws.com">>]},
        {<<"kinesis">>, {env, "KINESIS_VPC_ENDPOINTS"}}
    ]}
]}

Two options are supported:

  • explicit list of Route53 AZ endpoints
  • OS environment variable (handy for ECS deployments). The value of the variable should be of comma-separated string like "myAZ1.sqs-dns.amazonaws.com,myAZ2.sqs-dns.amazonaws.com"

Upon config generation, erlcloud will check the AZ of the deployment and match it to one of the pre-configured DNS records. First match is used and if not match found default is used.

Basic use

Then you can start making API calls, like:

erlcloud_ec2:describe_images().
% list buckets of Account stored in config in process dict
% of of the account you are running in.
erlcloud_s3:list_buckets().
erlcloud_s3:list_buckets(erlcloud_aws:default_cfg()).
% List buckets on 3d Account from Conf
erlcloud_s3:list_buckets(Conf).

Creating an EC2 instance may look like this:

start_instance(Ami, KeyPair, UserData, Type, Zone) ->
    Config = #aws_config{
            access_key_id = application:get_env(aws_key),
            secret_access_key = application:get_env(aws_secret)
           },
    InstanceSpec = #ec2_instance_spec{image_id = Ami,
                                      key_name = KeyPair,
                                      instance_type = Type,
                                      availability_zone = Zone,
                                      user_data = UserData},
    erlcloud_ec2:run_instances(InstanceSpec, Config).

For usage information, consult the source code and GitHub repo. For detailed API description refer to the AWS references at:

Notes

Indentation in contributions should follow indentation style of surrounding text. In general it follows default indentation rules of official erlang-mode as provided by OTP team.

Best Practices

  • All interfaces should provide a method for working with non-default config.
  • Public interfaces with paging logic should prefer {ok, Results, Marker} style to the {{paged, Marker}, Results} found in some modules. In case of records output, tokens should be part of the record.
  • Passing next page NextToken, NextMarker is preferred with Opts rather than a fun parameter like found in many modules.
  • Public interfaces should normally expose proplists over records. All new modules are preferred to have both.
  • Exposed records are to be used only for complex outputs. Examples to follow: ddb2, ecs.
  • Library should not expose any long running or stateful processes - no gen_servers, no caches and etc.

Publishing to hex.pm

erlcloud is available as a Hex package. A new version of the package can be published by maintainers using mix or rebar3. A hex-publish make target that uses rebar3 is provided for maintainers to use or reference when publishing a new version of the package.

Github Actions will eventually be used to automatically publish new versions.

lhttpc's People

Contributors

amanshin avatar carlisom avatar cjkjellander avatar daniel-zinov avatar dcorbacho avatar dluna avatar emafr avatar erszcz avatar etrepum avatar fdmanana avatar fp avatar getong avatar jadeallenx avatar jbothma avatar juantascon avatar lastres avatar ldgabbay avatar legoscia avatar leonardb avatar mabrek avatar nalundgaard avatar oscarh avatar paulgray avatar rmpalomino avatar robertoaloi avatar rumataestor avatar tolbrino avatar uwiger avatar viganiko avatar waisbrot avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

lhttpc's Issues

lhttpc incompatible with Erlang 20

See #10. Unit tests are failing on Erlang 20.

Worker information
hostname: 2215a7f4-8bb8-489c-a298-ffa4cebe6f78@1.i-0c3695f-production-2-worker-org-ec2.travisci.net
version: v3.0.2 https://github.com/travis-ci/worker/tree/f1c05caed79c66a9103f12a22e8a45ec66dbca64
instance: 0abc9fb:travis:erlang (via amqp)
startup: 736.505265ms
Build system information
Build language: erlang
Build group: stable
Build dist: trusty
Build id: 279541237
Job id: 279541242
Runtime kernel version: 4.11.6-041106-generic
travis-build version: 125c5d1fa
Build image provisioning date and time
Tue Aug 29 03:12:43 UTC 2017
Operating System Details
Distributor ID:	Ubuntu
Description:	Ubuntu 14.04.5 LTS
Release:	14.04
Codename:	trusty
Cookbooks Version
4642454 https://github.com/travis-ci/travis-cookbooks/tree/4642454
git version
git version 2.14.1
bash version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
gcc version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 16:58:30 2017
 OS/Arch:      linux/amd64
clang version
clang version 3.9.0 (tags/RELEASE_390/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/clang-3.9.0/bin
jq version
jq-1.5
bats version
Bats 0.4.0
shellcheck version
0.4.6
shfmt version
v1.3.1
ccache version
ccache version 3.1.9

Copyright (C) 2002-2007 Andrew Tridgell
Copyright (C) 2009-2011 Joel Rosdahl

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 3 of the License, or (at your option) any later
version.
cmake version
cmake version 3.2.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
heroku version
heroku-cli/6.13.19-6cd27b3 (linux-x64) node-v8.3.0
imagemagick version
Version: ImageMagick 6.7.7-10 2017-07-31 Q16 http://www.imagemagick.org
md5deep version
4.2
mercurial version
Mercurial Distributed SCM (version 4.2.2)
(see https://mercurial-scm.org for more information)

Copyright (C) 2005-2017 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
mysql version
mysql  Ver 14.14 Distrib 5.6.33, for debian-linux-gnu (x86_64) using  EditLine wrapper
openssl version
OpenSSL 1.0.1f 6 Jan 2014
packer version
Packer v1.0.2

Your version of Packer is out of date! The latest version
is 1.0.4. You can update by downloading from www.packer.io
postgresql client version
psql (PostgreSQL) 9.6.4
ragel version
Ragel State Machine Compiler version 6.8 Feb 2013
Copyright (c) 2001-2009 by Adrian Thurston
subversion version
svn, version 1.8.8 (r1568071)
   compiled Aug 10 2017, 17:20:39 on x86_64-pc-linux-gnu

Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository access (RA) modules are available:

* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
  - using serf 1.3.3
  - handles 'http' scheme
  - handles 'https' scheme

sudo version
Sudo version 1.8.9p5
Configure options: --prefix=/usr -v --with-all-insults --with-pam --with-fqdn --with-logging=syslog --with-logfac=authpriv --with-env-editor --with-editor=/usr/bin/editor --with-timeout=15 --with-password-timeout=0 --with-passprompt=[sudo] password for %p:  --without-lecture --with-tty-tickets --disable-root-mailer --enable-admin-flag --with-sendmail=/usr/sbin/sendmail --with-timedir=/var/lib/sudo --mandir=/usr/share/man --libexecdir=/usr/lib/sudo --with-sssd --with-sssd-lib=/usr/lib/x86_64-linux-gnu --with-selinux
Sudoers policy plugin version 1.8.9p5
Sudoers file grammar version 43

Sudoers path: /etc/sudoers
Authentication methods: 'pam'
Syslog facility if syslog is being used for logging: authpriv
Syslog priority to use when user authenticates successfully: notice
Syslog priority to use when user authenticates unsuccessfully: alert
Send mail if the user is not in sudoers
Use a separate timestamp for each user/tty combo
Lecture user the first time they run sudo
Root may run sudo
Allow some information gathering to give useful error messages
Require fully-qualified hostnames in the sudoers file
Visudo will honor the EDITOR environment variable
Set the LOGNAME and USER environment variables
Length at which to wrap log file lines (0 for no wrap): 80
Authentication timestamp timeout: 15.0 minutes
Password prompt timeout: 0.0 minutes
Number of tries to enter a password: 3
Umask to use or 0777 to use user's: 022
Path to mail program: /usr/sbin/sendmail
Flags for mail program: -t
Address to send mail to: root
Subject line for mail messages: *** SECURITY information for %h ***
Incorrect password message: Sorry, try again.
Path to authentication timestamp dir: /var/lib/sudo
Default password prompt: [sudo] password for %p: 
Default user to run commands as: root
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Path to the editor for use by visudo: /usr/bin/editor
When to require a password for 'list' pseudocommand: any
When to require a password for 'verify' pseudocommand: all
File descriptors >= 3 will be closed before executing a command
Environment variables to check for sanity:
	TZ
	TERM
	LINGUAS
	LC_*
	LANGUAGE
	LANG
	COLORTERM
Environment variables to remove:
	RUBYOPT
	RUBYLIB
	PYTHONUSERBASE
	PYTHONINSPECT
	PYTHONPATH
	PYTHONHOME
	TMPPREFIX
	ZDOTDIR
	READNULLCMD
	NULLCMD
	FPATH
	PERL5DB
	PERL5OPT
	PERL5LIB
	PERLLIB
	PERLIO_DEBUG 
	JAVA_TOOL_OPTIONS
	SHELLOPTS
	GLOBIGNORE
	PS4
	BASH_ENV
	ENV
	TERMCAP
	TERMPATH
	TERMINFO_DIRS
	TERMINFO
	_RLD*
	LD_*
	PATH_LOCALE
	NLSPATH
	HOSTALIASES
	RES_OPTIONS
	LOCALDOMAIN
	CDPATH
	IFS
Environment variables to preserve:
	JAVA_HOME
	TRAVIS
	CI
	DEBIAN_FRONTEND
	XAUTHORIZATION
	XAUTHORITY
	PS2
	PS1
	PATH
	LS_COLORS
	KRB5CCNAME
	HOSTNAME
	HOME
	DISPLAY
	COLORS
Locale to use while parsing sudoers: C
Directory in which to store input/output logs: /var/log/sudo-io
File in which to store the input/output log: %{seq}
Add an entry to the utmp/utmpx file when allocating a pty
PAM service name to use
PAM service name to use for login shells
Create a new PAM session for the command to run in
Maximum I/O log sequence number: 0

Local IP address and netmask pairs:
	172.17.0.2/255.255.0.0

Sudoers I/O plugin version 1.8.9p5
gzip version
gzip 1.6
Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
Copyright (C) 1993 Jean-loup Gailly.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Jean-loup Gailly.
zip version
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
Currently maintained by E. Gordon.  Please send bug reports to
the authors using the web page at www.info-zip.org; see README for details.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip,
as of above date; see http://www.info-zip.org/ for other sites.

Compiled with gcc 4.8.2 for Unix (Linux ELF) on Oct 21 2013.

Zip special compilation options:
	USE_EF_UT_TIME       (store Universal Time)
	BZIP2_SUPPORT        (bzip2 library version 1.0.6, 6-Sept-2010)
	    bzip2 code and library copyright (c) Julian R Seward
	    (See the bzip2 license for terms of use)
	SYMLINK_SUPPORT      (symbolic links supported)
	LARGE_FILE_SUPPORT   (can read and write large files on file system)
	ZIP64_SUPPORT        (use Zip64 to store large files in archives)
	UNICODE_SUPPORT      (store and read UTF-8 Unicode paths)
	STORE_UNIX_UIDs_GIDs (store UID/GID sizes/values using new extra field)
	UIDGID_NOT_16BIT     (old Unix 16-bit UID/GID extra field not used)
	[encryption, version 2.91 of 05 Jan 2007] (modified for Zip 3)

Encryption notice:
	The encryption code of this program is not copyrighted and is
	put in the public domain.  It was originally written in Europe
	and, to the best of our knowledge, can be freely distributed
	in both source and object forms from any country, including
	the USA under License Exception TSU of the U.S. Export
	Administration Regulations (section 740.13(e)) of 6 June 2002.

Zip environment options:
             ZIP:  [none]
          ZIPOPT:  [none]
vim version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:43:18)
Included patches: 1-52
Extra patches: 8.0.0056
Modified by [email protected]
Compiled by buildd@
Huge version without GUI.  Features included (+) or not (-):
+acl             +farsi           +mouse_netterm   +syntax
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
-balloon_eval    +float           +mouse_urxvt     -tag_any_white
-browse          +folding         +mouse_xterm     -tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         +gettext         -mzscheme        +textobjects
-clientserver    -hangul_input    +netbeans_intg   +title
-clipboard       +iconv           +path_extra      -toolbar
+cmdline_compl   +insert_expand   -perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con      -lua             +rightleft       +windows
+diff            +menu            -ruby            +writebackup
+digraphs        +mksession       +scrollbind      -X11
-dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     -xim
+emacs_tags      -mouseshape      -sniff           -xsmp
+eval            +mouse_dec       +startuptime     -xterm_clipboard
+ex_extra        +mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    -xpm
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H     -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1      
Linking: gcc   -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed -o vim        -lm -ltinfo -lnsl  -lselinux  -lacl -lattr -lgpm -ldl    -L/usr/lib/python2.7/config-x86_64-linux-gnu -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions      
iptables version
iptables v1.4.21
curl version
curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
wget version
GNU Wget 1.15 built on linux-gnu.
rsync version
rsync  version 3.1.0  protocol version 31
gimme version
v1.2.0
nvm version
0.33.2
perlbrew version
/home/travis/perl5/perlbrew/bin/perlbrew  - App::perlbrew/0.78
phpenv version
rbenv 1.1.1-4-g4ebd1bd
rvm version
rvm 1.29.2 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io/]
default ruby version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
CouchDB version
couchdb 1.6.1
ElasticSearch version
5.5.0
Installed Firefox version
firefox 55.0.2
MongoDB version
MongoDB 3.2.16
Pre-installed PostgreSQL versions
9.2.22
9.3.18
9.4.13
9.5.8
9.6.4
RabbitMQ Version
3.6.11
Redis version
redis-server 4.0.1
riak version
2.2.3
kerl list installations
19.0
18.3
kiex list

kiex elixirs

   elixir-1.2.6
=* elixir-1.3.2

# => - current
# =* - current && default
#  * - default

rebar --version
rebar 2.6.4 17 20160831_145136 git 2.6.4-dirty
perlbrew list
  5.22 (5.22.0)
  5.22-extras (5.22.0)
  5.22-shrplib (5.22.0)
  5.22.0
  5.24-extras (5.24.0)
  5.24-shrplib (5.24.0)
  5.24 (5.24.2)
  5.24.2

W: http://dl.hhvm.com/ubuntu/dists/trusty/InRelease: Signature by key 36AEF64D0207E7EEE352D4875A16E7281BE7A449 uses weak digest algorithm (SHA1)
W: http://ppa.launchpad.net/couchdb/stable/ubuntu/dists/trusty/Release.gpg: Signature by key 15866BAFD9BCC4F3C1E0DFC7D69548E1C17EAB57 uses weak digest algorithm (SHA1)
$ git clone --depth=50 https://github.com/erlcloud/lhttpc.git erlcloud/lhttpc
Cloning into 'erlcloud/lhttpc'...
remote: Counting objects: 816, done.
remote: Compressing objects: 100% (363/363), done.
remote: Total 816 (delta 472), reused 776 (delta 436), pack-reused 0
Receiving objects: 100% (816/816), 1.46 MiB | 23.73 MiB/s, done.
Resolving deltas: 100% (472/472), done.

$ cd erlcloud/lhttpc
$ git fetch origin +refs/pull/10/merge:
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 2), reused 2 (delta 1), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/erlcloud/lhttpc
 * branch            refs/pull/10/merge -> FETCH_HEAD

$ git checkout -qf FETCH_HEAD
20.0 is not installed. Downloading and installing pre-build binary.
Downloading archive: https://s3.amazonaws.com/travis-otp-releases/binaries/ubuntu/14.04/x86_64/erlang-20.0-nonroot.tar.bz2
$ wget -o $HOME/erlang.tar.bz2 ${archive_url}

$ mkdir -p ~/otp && tar -xf erlang-20.0-nonroot.tar.bz2 -C ~/otp/

$ mkdir -p ~/.kerl

$ echo '20.0,20.0' >> ~/.kerl/otp_builds

$ echo '20.0 $HOME/otp/20.0' >> ~/.kerl/otp_builds

$ source $HOME/otp/20.0/activate

$ ./rebar get-deps
==> lhttpc (get-deps)

$ make test
./rebar compile
==> lhttpc (compile)
Compiled src/lhttpc_lib.erl
Compiled src/lhttpc.erl
Compiled src/lhttpc_client.erl
Compiled src/lhttpc_sup.erl
Compiled src/lhttpc_sock.erl
src/lhttpc_manager.erl:270: Warning: crypto:rand_bytes/1 is deprecated and will be removed in a future release; use crypto:strong_rand_bytes/1
Compiled src/lhttpc_manager.erl
./rebar eunit
==> lhttpc (eunit)
Compiled test/lhttpc_lib_tests.erl
Compiled test/lhttpc_manager_tests.erl
Compiled test/socket_server.erl
test/lhttpc_tests.erl:401: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
test/lhttpc_tests.erl:417: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
Compiled test/lhttpc_tests.erl
Compiled test/webserver.erl
test/simple_load.erl:3: Warning: behaviour gen_httpd undefined
Compiled test/simple_load.erl
Compiled src/lhttpc.erl
Compiled src/lhttpc_lib.erl
Compiled src/lhttpc_sock.erl
Compiled src/lhttpc_sup.erl
Compiled src/lhttpc_client.erl
src/lhttpc_manager.erl:270: Warning: crypto:rand_bytes/1 is deprecated and will be removed in a future release; use crypto:strong_rand_bytes/1
Compiled src/lhttpc_manager.erl
======================== EUnit ========================
module 'lhttpc_manager'
  module 'lhttpc_manager_tests'
    lhttpc_manager_tests:52: manager_test_...[0.004 s] ok
    lhttpc_manager_tests:53: manager_test_...ok
    lhttpc_manager_tests:54: manager_test_...[3.104 s] ok
    lhttpc_manager_tests:55: manager_test_...[16.015 s] ok
    lhttpc_manager_tests:56: manager_test_...[2.002 s] ok
    lhttpc_manager_tests:57: manager_test_...[2.002 s] ok

=INFO REPORT==== 25-Sep-2017::14:30:44 ===
    application: lhttpc
    exited: stopped
    type: temporary

=INFO REPORT==== 25-Sep-2017::14:30:44 ===
    application: ssl
    exited: stopped
    type: temporary
    [done in 23.145 s]
  [done in 23.250 s]
module 'lhttpc_client'
module 'lhttpc_sup'
module 'lhttpc_sock'
module 'lhttpc_lib'
  module 'lhttpc_lib_tests'
    lhttpc_lib_tests:37: parse_url_test_...ok
    lhttpc_lib_tests:47: parse_url_test_...ok
    lhttpc_lib_tests:57: parse_url_test_...ok
    lhttpc_lib_tests:67: parse_url_test_...ok
    lhttpc_lib_tests:77: parse_url_test_...ok
    lhttpc_lib_tests:87: parse_url_test_...ok
    lhttpc_lib_tests:97: parse_url_test_...ok
    lhttpc_lib_tests:107: parse_url_test_...ok
    lhttpc_lib_tests:117: parse_url_test_...ok
    lhttpc_lib_tests:127: parse_url_test_...ok
    lhttpc_lib_tests:137: parse_url_test_...[0.010 s] ok
    lhttpc_lib_tests:148: parse_url_test_...ok
    lhttpc_lib_tests:158: parse_url_test_...ok
    lhttpc_lib_tests:168: parse_url_test_...ok
    lhttpc_lib_tests:178: parse_url_test_...ok
    lhttpc_lib_tests:188: parse_url_test_...ok
    lhttpc_lib_tests:198: parse_url_test_...ok
    lhttpc_lib_tests:208: parse_url_test_...ok
    lhttpc_lib_tests:218: parse_url_test_...ok
    lhttpc_lib_tests:228: parse_url_test_...ok
    lhttpc_lib_tests:238: parse_url_test_...ok
    lhttpc_lib_tests:248: parse_url_test_...ok
    [done in 0.076 s]
  [done in 0.076 s]
module 'lhttpc'
  module 'lhttpc_tests'
    lhttpc_tests:113: tcp_test_...[0.004 s] ok
    lhttpc_tests:114: tcp_test_...[0.003 s] ok
    lhttpc_tests:115: tcp_test_...[0.001 s] ok
    lhttpc_tests:116: tcp_test_...[0.003 s] ok
    lhttpc_tests:117: tcp_test_...[0.001 s] ok
    lhttpc_tests:118: tcp_test_...[0.001 s] ok
    lhttpc_tests:119: tcp_test_...[0.001 s] ok
    lhttpc_tests:120: tcp_test_...[0.001 s] ok
    lhttpc_tests:121: tcp_test_...[0.001 s] ok
    lhttpc_tests:122: tcp_test_...[0.001 s] ok
    lhttpc_tests:123: tcp_test_...[0.001 s] ok
    lhttpc_tests:124: tcp_test_...[0.001 s] ok
    lhttpc_tests:125: tcp_test_...[0.001 s] ok
    lhttpc_tests:126: tcp_test_...[0.001 s] ok
    lhttpc_tests:127: tcp_test_...[0.004 s] ok
    lhttpc_tests:128: tcp_test_...[0.001 s] ok
    lhttpc_tests:129: tcp_test_...[0.001 s] ok
    lhttpc_tests:130: tcp_test_...[0.001 s] ok
    lhttpc_tests:131: tcp_test_...[0.001 s] ok
    lhttpc_tests:132: tcp_test_...[0.001 s] ok
    lhttpc_tests:133: tcp_test_...[0.001 s] ok
    lhttpc_tests:134: tcp_test_...[0.001 s] ok
    lhttpc_tests:135: tcp_test_...[0.001 s] ok
    lhttpc_tests:136: tcp_test_...[0.002 s] ok
    lhttpc_tests:137: tcp_test_...[0.001 s] ok
    lhttpc_tests:138: tcp_test_...[0.001 s] ok
    lhttpc_tests:139: tcp_test_...ok
    lhttpc_tests:140: tcp_test_...[0.014 s] ok
    lhttpc_tests:141: tcp_test_...[0.051 s] ok
    lhttpc_tests:142: tcp_test_...[0.102 s] ok
    lhttpc_tests:143: tcp_test_...[0.052 s] ok
    lhttpc_tests:144: tcp_test_...[0.001 s] ok
    lhttpc_tests:145: tcp_test_...[0.001 s] ok
    lhttpc_tests:146: tcp_test_...[0.045 s] ok
    lhttpc_tests:147: tcp_test_...[0.045 s] ok
    lhttpc_tests:148: tcp_test_...[0.045 s] ok
    lhttpc_tests:149: tcp_test_...[0.001 s] ok
    lhttpc_tests:150: tcp_test_...ok
    lhttpc_tests:151: tcp_test_...[0.001 s] ok
    lhttpc_tests:152: tcp_test_...[0.001 s] ok
    lhttpc_tests:153: tcp_test_...[0.001 s] ok
    lhttpc_tests:154: tcp_test_...[0.001 s] ok
    lhttpc_tests:155: tcp_test_...[0.001 s] ok
    lhttpc_tests:156: tcp_test_...[0.001 s] ok
    lhttpc_tests:157: tcp_test_...[0.001 s] ok
    lhttpc_tests:158: tcp_test_...[0.001 s] ok
    lhttpc_tests:159: tcp_test_...[0.238 s] ok
    lhttpc_tests:160: tcp_test_...[0.001 s] ok
    lhttpc_tests:161: tcp_test_...ok
    lhttpc_tests:162: tcp_test_...[0.001 s] ok
    lhttpc_tests:163: tcp_test_...[0.051 s] ok

=INFO REPORT==== 25-Sep-2017::14:30:45 ===
    application: lhttpc
    exited: stopped
    type: temporary

=INFO REPORT==== 25-Sep-2017::14:30:45 ===
    application: ssl
    exited: stopped
    type: temporary
    lhttpc_tests:170: ssl_test_...[0.177 s] ok
    lhttpc_tests:171: ssl_test_...*failed*
in function lhttpc_tests:ssl_get_ipv6/0 (test/lhttpc_tests.erl, line 743)
**error:{badmatch,{error,{{options,{{server_name_indication,"::1"}}},
                  [{lhttpc_client,send_request,1,
                                  [{file,"src/lhttpc_client.erl"},{line,222}]},
                   {lhttpc_client,execute,9,
                                  [{file,"src/lhttpc_client.erl"},{line,171}]},
                   {lhttpc_client,request,9,
                                  [{file,"src/lhttpc_client.erl"},
                                   {line,93}]}]}}}
  output:<<"">>

    lhttpc_tests:172: ssl_test_...[0.023 s] ok
    lhttpc_tests:173: ssl_test_...[0.023 s] ok
    lhttpc_tests:174: ssl_test_...[0.051 s] ok

=ERROR REPORT==== 25-Sep-2017::14:30:45 ===
Error in process <0.573.0> with exit value:
{{badmatch,{error,closed}},
 [{webserver,accept,2,[{file,"test/webserver.erl"},{line,149}]},
  {webserver,accept_connection,4,[{file,"test/webserver.erl"},{line,51}]}]}

=INFO REPORT==== 25-Sep-2017::14:30:45 ===
    application: lhttpc
    exited: stopped
    type: temporary

=INFO REPORT==== 25-Sep-2017::14:30:45 ===
    application: ssl
    exited: stopped
    type: temporary
    lhttpc_tests:180: other_test_...ok
    [done in 1.143 s]
  [done in 1.144 s]
module 'simple_load'
module 'webserver'
module 'socket_server'
=======================================================
  Failed: 1.  Skipped: 0.  Passed: 84.
Cover analysis: /home/travis/build/erlcloud/lhttpc/.eunit/index.html

=INFO REPORT==== 25-Sep-2017::14:30:45 ===
    application: public_key
    exited: stopped
    type: temporary

=INFO REPORT==== 25-Sep-2017::14:30:45 ===
    application: asn1
    exited: stopped
    type: temporary
ERROR: One or more eunit tests failed.
make: *** [test] Error 1


The command "make test" exited with 2.

Done. Your build exited with 1.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.