Forráskód Böngészése

Unix socket support.

Brad Fitzpatrick 14 éve
szülő
commit
5a924ae1a1
2 módosított fájl, 43 hozzáadás és 6 törlés
  1. 30 2
      memcache_test.go
  2. 13 4
      selector.go

+ 30 - 2
memcache_test.go

@@ -18,8 +18,12 @@ limitations under the License.
 package memcache
 
 import (
+	"exec"
+	"fmt"
 	"net"
+	"os"
 	"testing"
+	"time"
 )
 
 const testServer = "localhost:11211"
@@ -35,12 +39,36 @@ func setup(t *testing.T) bool {
 	return true
 }
 
-func TestMemcache(t *testing.T) {
+func TestLocalhost(t *testing.T) {
 	if !setup(t) {
 		return
 	}
-	c := New(testServer)
+	testWithClient(t, New(testServer))
+}
+
+// Run the memcached binary as a child process and connect to its unix socket.
+func TestUnixSocket(t *testing.T) {
+	sock := fmt.Sprintf("/tmp/test-gomemcache-%d.sock", os.Getpid())
+	cmd := exec.Command("memcached", "-s", sock)
+	if err := cmd.Start(); err != nil {
+		t.Logf("skipping test; couldn't find memcached")
+		return
+	}
+	defer cmd.Wait()
+	defer cmd.Process.Kill()
+
+	// Wait a bit for the socket to appear.
+	for i := 0; i < 10; i++ {
+		if _, err := os.Stat(sock); err == nil {
+			break
+		}
+		time.Sleep(25e6 * int64(i))
+	}
+
+	testWithClient(t, New(sock))
+}
 
+func testWithClient(t *testing.T, c *Client) {
 	// Set
 	foo := &Item{Key: "foo", Value: []byte("fooval"), Flags: 123}
 	if err := c.Set(foo); err != nil {

+ 13 - 4
selector.go

@@ -20,6 +20,7 @@ import (
 	"hash/crc32"
 	"os"
 	"net"
+	"strings"
 	"sync"
 )
 
@@ -51,11 +52,19 @@ type ServerList struct {
 func (ss *ServerList) SetServers(servers ...string) os.Error {
 	naddr := make([]net.Addr, len(servers))
 	for i, server := range servers {
-		tcpaddr, err := net.ResolveTCPAddr("tcp", server)
-		if err != nil {
-			return err
+		if strings.Contains(server, "/") {
+			addr, err := net.ResolveUnixAddr("unix", server)
+			if err != nil {
+				return err
+			}
+			naddr[i] = addr
+		} else {
+			tcpaddr, err := net.ResolveTCPAddr("tcp", server)
+			if err != nil {
+				return err
+			}
+			naddr[i] = tcpaddr
 		}
-		naddr[i] = tcpaddr
 	}
 
 	ss.lk.Lock()