// Path: src/main/java/com/dsinpractice/samples/hadoop/domain/HttpRequest.java
// public class HttpRequest implements WritableComparable {
//     private String httpMethod;
//     private String url;
// 
//     public HttpRequest(String httpMethod, String url) {
//         this.httpMethod = httpMethod;
//         this.url = url;
//     }
// 
//     public HttpRequest() {
// 
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         HttpRequest that = (HttpRequest) o;
// 
//         if (!httpMethod.equals(that.httpMethod)) return false;
//         if (!url.equals(that.url)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = httpMethod.hashCode();
//         result = 31 * result + url.hashCode();
//         return result;
//     }
// 
//     @Override
//     public void write(DataOutput dataOutput) throws IOException {
//         dataOutput.writeUTF(httpMethod);
//         dataOutput.writeUTF(url);
//     }
// 
//     @Override
//     public void readFields(DataInput dataInput) throws IOException {
//         httpMethod = dataInput.readUTF();
//         url = dataInput.readUTF();
//     }
// 
//     @Override
//     public String toString() {
//         return String.format("%s,%s", httpMethod,url);
//     }
// 
//     @Override
//     public int compareTo(Object o) {
//         if (equals(o)) return 0;
//         if ((o==null) || (o.getClass() != getClass())) return 1;
//         HttpRequest otherRequest = (HttpRequest) o;
//         if (url.equals(otherRequest.url)) {
//             return httpMethod.compareTo(otherRequest.httpMethod);
//         } else {
//             return url.compareTo(otherRequest.url);
//         }
//     }
// }
// 
// Path: src/main/java/com/dsinpractice/samples/hadoop/domain/LogEntry.java
// public class LogEntry implements Writable {
// 
//     private String date;
//     private String time;
//     private HttpRequest request;
// 
//     public String getDate() {
//         return date;
//     }
// 
//     public String getTime() {
//         return time;
//     }
// 
//     public HttpRequest getRequest() {
//         return request;
//     }
// 
//     public LogEntry() {
// 
//     }
// 
//     public LogEntry(String date, String time, HttpRequest request) {
//         this.date = date;
//         this.time = time;
//         this.request = request;
//     }
// 
//     @Override
//     public void write(DataOutput dataOutput) throws IOException {
//         dataOutput.writeUTF(date);
//         dataOutput.writeUTF(time);
//         request.write(dataOutput);
//     }
// 
//     @Override
//     public void readFields(DataInput dataInput) throws IOException {
//         date = dataInput.readUTF();
//         time = dataInput.readUTF();
//         request = new HttpRequest();
//         request.readFields(dataInput);
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         LogEntry logEntry = (LogEntry) o;
// 
//         if (!date.equals(logEntry.date)) return false;
//         if (!request.equals(logEntry.request)) return false;
//         if (!time.equals(logEntry.time)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = date.hashCode();
//         result = 31 * result + time.hashCode();
//         result = 31 * result + request.hashCode();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return String.format("%s,%s,%s", date, time, request.toString());
//     }
// 
// }


import com.dsinpractice.samples.hadoop.domain.HttpRequest;
import com.dsinpractice.samples.hadoop.domain.LogEntry;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mrunit.mapreduce.ReduceDriver;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
package com.dsinpractice.samples.hadoop.mapred.logparsing;



public class LogParsingReducerTest {

    @Test
    public void should_collect_request_times() {
        LogParsingReducer logParsingReducer = new LogParsingReducer();
// Path: src/main/java/com/dsinpractice/samples/hadoop/domain/HttpRequest.java
// public class HttpRequest implements WritableComparable {
//     private String httpMethod;
//     private String url;
// 
//     public HttpRequest(String httpMethod, String url) {
//         this.httpMethod = httpMethod;
//         this.url = url;
//     }
// 
//     public HttpRequest() {
// 
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         HttpRequest that = (HttpRequest) o;
// 
//         if (!httpMethod.equals(that.httpMethod)) return false;
//         if (!url.equals(that.url)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = httpMethod.hashCode();
//         result = 31 * result + url.hashCode();
//         return result;
//     }
// 
//     @Override
//     public void write(DataOutput dataOutput) throws IOException {
//         dataOutput.writeUTF(httpMethod);
//         dataOutput.writeUTF(url);
//     }
// 
//     @Override
//     public void readFields(DataInput dataInput) throws IOException {
//         httpMethod = dataInput.readUTF();
//         url = dataInput.readUTF();
//     }
// 
//     @Override
//     public String toString() {
//         return String.format("%s,%s", httpMethod,url);
//     }
// 
//     @Override
//     public int compareTo(Object o) {
//         if (equals(o)) return 0;
//         if ((o==null) || (o.getClass() != getClass())) return 1;
//         HttpRequest otherRequest = (HttpRequest) o;
//         if (url.equals(otherRequest.url)) {
//             return httpMethod.compareTo(otherRequest.httpMethod);
//         } else {
//             return url.compareTo(otherRequest.url);
//         }
//     }
// }
// 
// Path: src/main/java/com/dsinpractice/samples/hadoop/domain/LogEntry.java
// public class LogEntry implements Writable {
// 
//     private String date;
//     private String time;
//     private HttpRequest request;
// 
//     public String getDate() {
//         return date;
//     }
// 
//     public String getTime() {
//         return time;
//     }
// 
//     public HttpRequest getRequest() {
//         return request;
//     }
// 
//     public LogEntry() {
// 
//     }
// 
//     public LogEntry(String date, String time, HttpRequest request) {
//         this.date = date;
//         this.time = time;
//         this.request = request;
//     }
// 
//     @Override
//     public void write(DataOutput dataOutput) throws IOException {
//         dataOutput.writeUTF(date);
//         dataOutput.writeUTF(time);
//         request.write(dataOutput);
//     }
// 
//     @Override
//     public void readFields(DataInput dataInput) throws IOException {
//         date = dataInput.readUTF();
//         time = dataInput.readUTF();
//         request = new HttpRequest();
//         request.readFields(dataInput);
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         LogEntry logEntry = (LogEntry) o;
// 
//         if (!date.equals(logEntry.date)) return false;
//         if (!request.equals(logEntry.request)) return false;
//         if (!time.equals(logEntry.time)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = date.hashCode();
//         result = 31 * result + time.hashCode();
//         result = 31 * result + request.hashCode();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return String.format("%s,%s,%s", date, time, request.toString());
//     }
// 
// }


// Path: src/test/java/com/dsinpractice/samples/hadoop/mapred/logparsing/LogParsingReducerTest.java
import com.dsinpractice.samples.hadoop.domain.HttpRequest;
import com.dsinpractice.samples.hadoop.domain.LogEntry;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mrunit.mapreduce.ReduceDriver;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;

package com.dsinpractice.samples.hadoop.mapred.logparsing;



public class LogParsingReducerTest {

    @Test
    public void should_collect_request_times() {
        LogParsingReducer logParsingReducer = new LogParsingReducer();
        ReduceDriver<HttpRequest, LogEntry, HttpRequest, Text> logParsingReduceDriver