| 93 | } |
| 94 | |
| 95 | func TestAtomicOps(t *testing.T) { |
| 96 | c := newClient(t) |
| 97 | err := c.MSET(map[string]Value{ |
| 98 | "k1": StringValue{"v1"}, |
| 99 | "k2": StringValue{"v2"}, |
| 100 | "k3": StringValue{"v3"}, |
| 101 | }) |
| 102 | assert.NoError(t, err) |
| 103 | values, err := c.MGET([]string{"k1", "k2", "k3"}...) |
| 104 | assert.NoError(t, err) |
| 105 | assert.Len(t, values, 3) |
| 106 | assert.Equal(t, "v1", values["k1"].String()) |
| 107 | assert.Equal(t, "v2", values["k2"].String()) |
| 108 | assert.Equal(t, "v3", values["k3"].String()) |
| 109 | |
| 110 | err = c.MSET(map[string]Value{"k3": StringValue{"v3.1"}, "k4": StringValue{"v4"}}) |
| 111 | assert.NoError(t, err) |
| 112 | |
| 113 | v, err := c.GET("k3") |
| 114 | assert.NoError(t, err) |
| 115 | assert.Equal(t, "v3.1", v.String()) |
| 116 | |
| 117 | values, err = c.MGET("k3", "k4") |
| 118 | assert.NoError(t, err) |
| 119 | assert.Len(t, values, 2) |
| 120 | assert.Equal(t, "v3.1", values["k3"].String()) |
| 121 | assert.Equal(t, "v4", values["k4"].String()) |
| 122 | |
| 123 | ok, err := c.MSETNX(map[string]Value{"k3": StringValue{"v3.2"}, "k5": StringValue{"v5"}}) |
| 124 | assert.NoError(t, err) |
| 125 | assert.False(t, ok) |
| 126 | |
| 127 | values, err = c.MGET([]string{"k3", "k5"}...) |
| 128 | assert.NoError(t, err) |
| 129 | assert.Len(t, values, 2) |
| 130 | assert.Equal(t, "v3.1", values["k3"].String()) |
| 131 | assert.False(t, values["k5"].Present()) |
| 132 | assert.NoError(t, err) |
| 133 | |
| 134 | ok, err = c.MSETNX(map[string]Value{"k5": StringValue{"v5"}, "k6": StringValue{"v6"}}) |
| 135 | assert.NoError(t, err) |
| 136 | assert.True(t, ok) |
| 137 | |
| 138 | values, err = c.MGET("k5", "k6") |
| 139 | assert.NoError(t, err) |
| 140 | assert.Len(t, values, 2) |
| 141 | assert.Equal(t, "v5", values["k5"].String()) |
| 142 | assert.Equal(t, "v6", values["k6"].String()) |
| 143 | } |