(t *testing.T)
| 1855 | } |
| 1856 | |
| 1857 | func TestKeyValueKeysDeduplicate(t *testing.T) { |
| 1858 | s := RunBasicJetStreamServer() |
| 1859 | defer shutdownJSServerAndRemoveStorage(t, s) |
| 1860 | |
| 1861 | nc, js := jsClient(t, s) |
| 1862 | defer nc.Close() |
| 1863 | |
| 1864 | kv, err := js.CreateKeyValue(&nats.KeyValueConfig{Bucket: "TEST_KV", History: 5}) |
| 1865 | if err != nil { |
| 1866 | t.Fatalf("Error creating KV: %v", err) |
| 1867 | } |
| 1868 | |
| 1869 | for i := range 10 { |
| 1870 | key := fmt.Sprintf("key_%d", i) |
| 1871 | if _, err := kv.PutString(key, "initial"); err != nil { |
| 1872 | t.Fatalf("Error putting key %s: %v", key, err) |
| 1873 | } |
| 1874 | } |
| 1875 | |
| 1876 | done := make(chan bool) |
| 1877 | go func() { |
| 1878 | for { |
| 1879 | select { |
| 1880 | case <-done: |
| 1881 | return |
| 1882 | default: |
| 1883 | for i := range 5 { |
| 1884 | key := fmt.Sprintf("key_%d", i) |
| 1885 | kv.PutString(key, "updated") |
| 1886 | } |
| 1887 | } |
| 1888 | } |
| 1889 | }() |
| 1890 | |
| 1891 | for range 20 { |
| 1892 | keys, err := kv.Keys() |
| 1893 | if err != nil { |
| 1894 | t.Fatalf("Error getting keys: %v", err) |
| 1895 | } |
| 1896 | |
| 1897 | seen := make(map[string]struct{}) |
| 1898 | for _, key := range keys { |
| 1899 | if _, exists := seen[key]; exists { |
| 1900 | t.Fatalf("Duplicate key found: %s", key) |
| 1901 | } |
| 1902 | seen[key] = struct{}{} |
| 1903 | } |
| 1904 | } |
| 1905 | |
| 1906 | close(done) |
| 1907 | } |
| 1908 | |
| 1909 | func TestKeyValueConfig(t *testing.T) { |
| 1910 | s := RunBasicJetStreamServer() |
nothing calls this directly
no test coverage detected