From 118d0de8e67e543120fcca8e91b375270d1b8ede Mon Sep 17 00:00:00 2001
From: Nikolay Kim <fafhrd91@gmail.com>
Date: Mon, 22 Jan 2018 22:28:29 -0800
Subject: [PATCH] add tests

---
 .travis.yml         | 67 ++++++++++++++++++++++++++++++++++++++++++++
 Cargo.toml          |  2 +-
 src/lib.rs          |  6 +++-
 src/redis.rs        |  2 +-
 tests/test_redis.rs | 68 +++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 142 insertions(+), 3 deletions(-)
 create mode 100644 .travis.yml
 create mode 100644 tests/test_redis.rs

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..82d8b9f17
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,67 @@
+language: rust
+rust:
+  - 1.20.0
+  - stable
+  - beta
+  - nightly
+
+sudo: required
+dist: trusty
+
+services:
+  - redis-server
+
+env:
+  global:
+    - RUSTFLAGS="-C link-dead-code"
+
+addons:
+  apt:
+    packages:
+      - libcurl4-openssl-dev
+      - libelf-dev
+      - libdw-dev
+      - cmake
+      - gcc
+      - binutils-dev
+      - libiberty-dev
+
+# Add clippy
+before_script:
+  - |
+    if [[ "$TRAVIS_RUST_VERSION" == "nightly" ]]; then
+    ( ( cargo install clippy && export CLIPPY=true ) || export CLIPPY=false );
+    fi
+  - export PATH=$PATH:~/.cargo/bin
+
+script:
+  - |
+    if [[ "$TRAVIS_RUST_VERSION" == "nightly" ]]; then
+        USE_SKEPTIC=1 cargo test
+    else
+        cargo test
+        cd examples/chat && cargo check && cd ../..
+    fi
+  - |
+    if [[ "$TRAVIS_RUST_VERSION" == "nightly" && $CLIPPY ]]; then
+        cargo clippy
+    fi
+
+# Upload docs
+after_success:
+  - |
+    if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_PULL_REQUEST" = "false" && "$TRAVIS_BRANCH" == "master" && "$TRAVIS_RUST_VERSION" == "stable" ]]; then
+    cargo doc --no-deps &&
+    echo "<meta http-equiv=refresh content=0;url=os_balloon/index.html>" > target/doc/index.html &&
+    git clone https://github.com/davisp/ghp-import.git &&
+    ./ghp-import/ghp_import.py -n -p -f -m "Documentation upload" -r https://"$GH_TOKEN"@github.com/"$TRAVIS_REPO_SLUG.git" target/doc &&
+    echo "Uploaded documentation"
+    fi
+
+  - |
+    if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == "nightly" ]]; then
+      bash <(curl https://raw.githubusercontent.com/xd009642/tarpaulin/master/travis-install.sh)
+      USE_SKEPTIC=1 cargo tarpaulin --out Xml
+      bash <(curl -s https://codecov.io/bash)
+      echo "Uploaded code coverage"
+    fi
diff --git a/Cargo.toml b/Cargo.toml
index 3fe330e44..ddef1c8c6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -23,7 +23,7 @@ default = ["web"]
 web = ["actix-web", "cookie", "http", "rand", "serde", "serde_json"]
 
 [dependencies]
-actix = "^0.4.3"
+actix = "^0.4.5"
 
 log = "0.4"
 backoff = "0.1"
diff --git a/src/lib.rs b/src/lib.rs
index 29146b9d9..a5b40f4fa 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -14,7 +14,7 @@ extern crate trust_dns_resolver;
 mod redis;
 mod connect;
 
-pub use redis::RedisActor;
+pub use redis::{Command, RedisActor};
 pub use connect::TcpConnector;
 
 #[cfg(feature="web")]
@@ -56,3 +56,7 @@ impl From<redis_async::error::Error> for Error {
         Error::Redis(err)
     }
 }
+
+// re-export
+pub use redis_async::resp::RespValue;
+pub use redis_async::error::Error as RespError;
diff --git a/src/redis.rs b/src/redis.rs
index a369dfacd..ddaebdd95 100644
--- a/src/redis.rs
+++ b/src/redis.rs
@@ -14,7 +14,7 @@ use redis_async::resp::{RespCodec, RespValue};
 use Error;
 use connect::TcpConnector;
 
-#[derive(Message)]
+#[derive(Message, Debug)]
 #[rtype(RespValue, Error)]
 pub struct Command(pub RespValue);
 
diff --git a/tests/test_redis.rs b/tests/test_redis.rs
new file mode 100644
index 000000000..2123c7e1b
--- /dev/null
+++ b/tests/test_redis.rs
@@ -0,0 +1,68 @@
+extern crate actix;
+extern crate actix_redis;
+#[macro_use]
+extern crate redis_async;
+extern crate futures;
+extern crate env_logger;
+
+use actix::prelude::*;
+use actix_redis::{RedisActor, Command, Error, RespValue};
+use futures::Future;
+
+#[test]
+fn test_error_connect() {
+    let sys = System::new("test");
+
+    let addr = RedisActor::start("localhost:54000");
+    let _addr2 = addr.clone();
+
+    Arbiter::handle().spawn_fn(move || {
+        addr.call_fut(Command(resp_array!["GET", "test"]))
+            .then(|res| {
+                match res {
+                    Ok(Err(Error::NotConnected)) => (),
+                    _ => panic!("Should not happen {:?}", res),
+                }
+                Arbiter::system().send(actix::msgs::SystemExit(0));
+                Ok(())
+            })
+    });
+
+    sys.run();
+}
+
+
+#[test]
+fn test_redis() {
+    env_logger::init();
+    let sys = System::new("test");
+
+    let addr = RedisActor::start("127.0.0.1:6379");
+    let _addr2 = addr.clone();
+
+    Arbiter::handle().spawn_fn(move || {
+        let addr2 = addr.clone();
+        addr.call_fut(Command(resp_array!["SET", "test", "value"]))
+            .then(move |res| match res {
+                Ok(Ok(resp)) => {
+                    assert_eq!(resp, RespValue::SimpleString("OK".to_owned()));
+                    addr2.call_fut(Command(resp_array!["GET", "test"]))
+                        .then(|res| {
+                            match res {
+                                Ok(Ok(resp)) => {
+                                    println!("RESP: {:?}", resp);
+                                    assert_eq!(
+                                        resp, RespValue::BulkString((&b"value"[..]).into()));
+                                },
+                                _ => panic!("Should not happen {:?}", res),
+                            }
+                            Arbiter::system().send(actix::msgs::SystemExit(0));
+                            Ok(())
+                        })
+                },
+                _ => panic!("Should not happen {:?}", res),
+            })
+    });
+
+    sys.run();
+}