// Path: src/main/java/ru/shadam/tarantool/core/SimpleSocketChannelProvider.java
// public class SimpleSocketChannelProvider implements SocketChannelProvider {
//     private static final Logger logger = LoggerFactory.getLogger(SimpleSocketChannelProvider.class);
// 
//     private final String host;
//     private final int port;
// 
//     public SimpleSocketChannelProvider(String host, int port) {
//         this.host = host;
//         this.port = port;
//     }
// 
//     @Override
//     public SocketChannel get(int retryNumber, Throwable lastError) {
//         if(lastError != null) {
//             logger.error(lastError.getMessage(), lastError);
//         }
//         try {
//             return SocketChannel.open(new InetSocketAddress(host, port));
//         } catch (IOException e) {
//             throw new IllegalStateException(e.getMessage(), e);
//         }
//     }
// }
// 
// Path: src/integration/java/ru/shadam/tarantool/repository/entity/Address.java
// public class Address {
//     @Id
//     @Tuple(index =0)
//     private Long id;
// 
//     @Tuple(index = 1)
//     private String city;
// 
//     @Tuple(index = 2)
//     private String street;
// 
//     @Tuple(index = 3)
//     private String number;
// 
//     protected Address() {}
// 
//     public Address(String city, String street, String number) {
//         this.city = city;
//         this.street = street;
//         this.number = number;
//     }
// 
//     public Address(long id, String city, String street, String number) {
//         this.id = id;
//         this.city = city;
//         this.street = street;
//         this.number = number;
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getCity() {
//         return city;
//     }
// 
//     public void setCity(String city) {
//         this.city = city;
//     }
// 
//     public String getStreet() {
//         return street;
//     }
// 
//     public void setStreet(String street) {
//         this.street = street;
//     }
// 
//     public String getNumber() {
//         return number;
//     }
// 
//     public void setNumber(String number) {
//         this.number = number;
//     }
// }
// 
// Path: src/integration/java/ru/shadam/tarantool/repository/entity/LogEntry.java
// @KeySpace("log_entry")
// public class LogEntry {
//     @Id
//     @Tuple(index = 0)
//     private String uid;
// 
//     private String text;
// 
//     protected LogEntry() {
//     }
// 
//     public LogEntry(String uid, String text) {
//         this.uid = uid;
//         this.text = text;
//     }
// 
//     public String getUid() {
//         return uid;
//     }
// 
//     public void setUid(String uid) {
//         this.uid = uid;
//     }
// 
//     public String getText() {
//         return text;
//     }
// 
//     public void setText(String text) {
//         this.text = text;
//     }
// }
// 
// Path: src/integration/java/ru/shadam/tarantool/repository/entity/User.java
// public class User {
//     @Tuple(index = 0)
//     public long id;
//     @Tuple(index = 1)
//     @Index("name_index")
//     public String name;
// 
//     public User() {
//     }
// }


import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.palantir.docker.compose.DockerComposeRule;
import com.palantir.docker.compose.connection.DockerPort;
import com.palantir.docker.compose.connection.waiting.HealthChecks;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.env.MapPropertySource;
import org.springframework.data.repository.CrudRepository;
import org.tarantool.*;
import ru.shadam.tarantool.core.SimpleSocketChannelProvider;
import ru.shadam.tarantool.repository.configuration.EnableTarantoolRepositories;
import ru.shadam.tarantool.repository.entity.Address;
import ru.shadam.tarantool.repository.entity.LogEntry;
import ru.shadam.tarantool.repository.entity.User;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
        Assert.assertEquals(2, userRepository.count());
    }


    @Test
    public void testInsertAndDeleteByObject() {
        final User user = new User();
        user.id = 7L;
        user.name = "John Doe";

        userRepository.save(user);

        userRepository.delete(user);

        Assert.assertEquals(0, userRepository.count());
    }

    @Test
    public void testExists() {
        final User user = new User();
        user.id = 8L;
        user.name = "John Doe";

        final User saved = userRepository.save(user);

        Assert.assertTrue(userRepository.exists(8L));
    }

    @Test
    public void testBasicCrudForStringKey() {
// Path: src/main/java/ru/shadam/tarantool/core/SimpleSocketChannelProvider.java
// public class SimpleSocketChannelProvider implements SocketChannelProvider {
//     private static final Logger logger = LoggerFactory.getLogger(SimpleSocketChannelProvider.class);
// 
//     private final String host;
//     private final int port;
// 
//     public SimpleSocketChannelProvider(String host, int port) {
//         this.host = host;
//         this.port = port;
//     }
// 
//     @Override
//     public SocketChannel get(int retryNumber, Throwable lastError) {
//         if(lastError != null) {
//             logger.error(lastError.getMessage(), lastError);
//         }
//         try {
//             return SocketChannel.open(new InetSocketAddress(host, port));
//         } catch (IOException e) {
//             throw new IllegalStateException(e.getMessage(), e);
//         }
//     }
// }
// 
// Path: src/integration/java/ru/shadam/tarantool/repository/entity/Address.java
// public class Address {
//     @Id
//     @Tuple(index =0)
//     private Long id;
// 
//     @Tuple(index = 1)
//     private String city;
// 
//     @Tuple(index = 2)
//     private String street;
// 
//     @Tuple(index = 3)
//     private String number;
// 
//     protected Address() {}
// 
//     public Address(String city, String street, String number) {
//         this.city = city;
//         this.street = street;
//         this.number = number;
//     }
// 
//     public Address(long id, String city, String street, String number) {
//         this.id = id;
//         this.city = city;
//         this.street = street;
//         this.number = number;
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getCity() {
//         return city;
//     }
// 
//     public void setCity(String city) {
//         this.city = city;
//     }
// 
//     public String getStreet() {
//         return street;
//     }
// 
//     public void setStreet(String street) {
//         this.street = street;
//     }
// 
//     public String getNumber() {
//         return number;
//     }
// 
//     public void setNumber(String number) {
//         this.number = number;
//     }
// }
// 
// Path: src/integration/java/ru/shadam/tarantool/repository/entity/LogEntry.java
// @KeySpace("log_entry")
// public class LogEntry {
//     @Id
//     @Tuple(index = 0)
//     private String uid;
// 
//     private String text;
// 
//     protected LogEntry() {
//     }
// 
//     public LogEntry(String uid, String text) {
//         this.uid = uid;
//         this.text = text;
//     }
// 
//     public String getUid() {
//         return uid;
//     }
// 
//     public void setUid(String uid) {
//         this.uid = uid;
//     }
// 
//     public String getText() {
//         return text;
//     }
// 
//     public void setText(String text) {
//         this.text = text;
//     }
// }
// 
// Path: src/integration/java/ru/shadam/tarantool/repository/entity/User.java
// public class User {
//     @Tuple(index = 0)
//     public long id;
//     @Tuple(index = 1)
//     @Index("name_index")
//     public String name;
// 
//     public User() {
//     }
// }


// Path: src/integration/java/ru/shadam/tarantool/repository/RepositoryIntegrationTests.java
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.palantir.docker.compose.DockerComposeRule;
import com.palantir.docker.compose.connection.DockerPort;
import com.palantir.docker.compose.connection.waiting.HealthChecks;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.env.MapPropertySource;
import org.springframework.data.repository.CrudRepository;
import org.tarantool.*;
import ru.shadam.tarantool.core.SimpleSocketChannelProvider;
import ru.shadam.tarantool.repository.configuration.EnableTarantoolRepositories;
import ru.shadam.tarantool.repository.entity.Address;
import ru.shadam.tarantool.repository.entity.LogEntry;
import ru.shadam.tarantool.repository.entity.User;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

        Assert.assertEquals(2, userRepository.count());
    }


    @Test
    public void testInsertAndDeleteByObject() {
        final User user = new User();
        user.id = 7L;
        user.name = "John Doe";

        userRepository.save(user);

        userRepository.delete(user);

        Assert.assertEquals(0, userRepository.count());
    }

    @Test
    public void testExists() {
        final User user = new User();
        user.id = 8L;
        user.name = "John Doe";

        final User saved = userRepository.save(user);

        Assert.assertTrue(userRepository.exists(8L));
    }

    @Test
    public void testBasicCrudForStringKey() {
        LogEntry logEntry = new LogEntry("asdasd", "Hello, world");