diff --git a/client/client_test.go b/client/client_test.go index 53e185c..b80a4da 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -1264,8 +1264,6 @@ func testHishtoryOffline(t *testing.T, tester shellTester) { } } -// TODO: tests for hishtory import - func testInitialHistoryImport(t *testing.T, tester shellTester) { // Setup defer testutils.BackupAndRestore(t)() @@ -2453,6 +2451,48 @@ func testMultipleUsers(t *testing.T, tester shellTester) { } } +func createSyntheticImportEntries(t testing.TB, numSyntheticEntries int) { + homedir, err := os.UserHomeDir() + require.NoError(t, err) + f, err := os.OpenFile(path.Join(homedir, ".bash_history"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + require.NoError(t, err) + defer f.Close() + for i := 1; i <= numSyntheticEntries; i++ { + _, err := f.WriteString(fmt.Sprintf("echo command-%d\n", i)) + require.NoError(t, err) + } + require.NoError(t, f.Close()) +} + +func TestImportHistory(t *testing.T) { + // Setup + tester := bashTester{} + defer testutils.BackupAndRestore(t)() + userSecret := installHishtory(t, tester, "") + numSyntheticEntries := 305 + createSyntheticImportEntries(t, numSyntheticEntries) + + // Run the import + ctx := hctx.MakeContext() + numImported, err := lib.ImportHistory(ctx, false, true) + require.NoError(t, err) + require.Equal(t, numImported, numSyntheticEntries+1) + + // Check that it imported all of them + out := tester.RunInteractiveShell(t, ` hishtory export -pipefail`) + testutils.CompareGoldens(t, out, "TestImportHistory-export") + + // Check that it was uploaded so that another user can get it + testutils.ResetLocalState(t) + installHishtory(t, tester, userSecret) + out = strings.TrimSpace(tester.RunInteractiveShell(t, ` hishtory export -pipefail | wc -l`)) + require.Equal(t, "305", out) + out = tester.RunInteractiveShell(t, ` hishtory export -pipefail`) + require.Contains(t, out, "echo command-305") + + // TODO: There is a bug here that will be evident if you check that the export is in the correct order on the remote device, because timestamps don't have sufficient granularity +} + func BenchmarkImport(b *testing.B) { b.StopTimer() // Setup @@ -2467,16 +2507,7 @@ func BenchmarkImport(b *testing.B) { // Create a large history in bash that we will pre-import numSyntheticEntries := 100_000 - homedir, err := os.UserHomeDir() - require.NoError(b, err) - f, err := os.OpenFile(path.Join(homedir, ".bash_history"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) - require.NoError(b, err) - defer f.Close() - for i := 1; i <= numSyntheticEntries; i++ { - _, err := f.WriteString(fmt.Sprintf("echo command-%d\n", i)) - require.NoError(b, err) - } - require.NoError(b, f.Close()) + createSyntheticImportEntries(b, numSyntheticEntries) // Benchmarked code: b.StartTimer() diff --git a/client/lib/goldens/TestImportHistory-export b/client/lib/goldens/TestImportHistory-export new file mode 100644 index 0000000..fe6d3db --- /dev/null +++ b/client/lib/goldens/TestImportHistory-export @@ -0,0 +1,305 @@ +echo command-1 +echo command-2 +echo command-3 +echo command-4 +echo command-5 +echo command-6 +echo command-7 +echo command-8 +echo command-9 +echo command-10 +echo command-11 +echo command-12 +echo command-13 +echo command-14 +echo command-15 +echo command-16 +echo command-17 +echo command-18 +echo command-19 +echo command-20 +echo command-21 +echo command-22 +echo command-23 +echo command-24 +echo command-25 +echo command-26 +echo command-27 +echo command-28 +echo command-29 +echo command-30 +echo command-31 +echo command-32 +echo command-33 +echo command-34 +echo command-35 +echo command-36 +echo command-37 +echo command-38 +echo command-39 +echo command-40 +echo command-41 +echo command-42 +echo command-43 +echo command-44 +echo command-45 +echo command-46 +echo command-47 +echo command-48 +echo command-49 +echo command-50 +echo command-51 +echo command-52 +echo command-53 +echo command-54 +echo command-55 +echo command-56 +echo command-57 +echo command-58 +echo command-59 +echo command-60 +echo command-61 +echo command-62 +echo command-63 +echo command-64 +echo command-65 +echo command-66 +echo command-67 +echo command-68 +echo command-69 +echo command-70 +echo command-71 +echo command-72 +echo command-73 +echo command-74 +echo command-75 +echo command-76 +echo command-77 +echo command-78 +echo command-79 +echo command-80 +echo command-81 +echo command-82 +echo command-83 +echo command-84 +echo command-85 +echo command-86 +echo command-87 +echo command-88 +echo command-89 +echo command-90 +echo command-91 +echo command-92 +echo command-93 +echo command-94 +echo command-95 +echo command-96 +echo command-97 +echo command-98 +echo command-99 +echo command-100 +echo command-101 +echo command-102 +echo command-103 +echo command-104 +echo command-105 +echo command-106 +echo command-107 +echo command-108 +echo command-109 +echo command-110 +echo command-111 +echo command-112 +echo command-113 +echo command-114 +echo command-115 +echo command-116 +echo command-117 +echo command-118 +echo command-119 +echo command-120 +echo command-121 +echo command-122 +echo command-123 +echo command-124 +echo command-125 +echo command-126 +echo command-127 +echo command-128 +echo command-129 +echo command-130 +echo command-131 +echo command-132 +echo command-133 +echo command-134 +echo command-135 +echo command-136 +echo command-137 +echo command-138 +echo command-139 +echo command-140 +echo command-141 +echo command-142 +echo command-143 +echo command-144 +echo command-145 +echo command-146 +echo command-147 +echo command-148 +echo command-149 +echo command-150 +echo command-151 +echo command-152 +echo command-153 +echo command-154 +echo command-155 +echo command-156 +echo command-157 +echo command-158 +echo command-159 +echo command-160 +echo command-161 +echo command-162 +echo command-163 +echo command-164 +echo command-165 +echo command-166 +echo command-167 +echo command-168 +echo command-169 +echo command-170 +echo command-171 +echo command-172 +echo command-173 +echo command-174 +echo command-175 +echo command-176 +echo command-177 +echo command-178 +echo command-179 +echo command-180 +echo command-181 +echo command-182 +echo command-183 +echo command-184 +echo command-185 +echo command-186 +echo command-187 +echo command-188 +echo command-189 +echo command-190 +echo command-191 +echo command-192 +echo command-193 +echo command-194 +echo command-195 +echo command-196 +echo command-197 +echo command-198 +echo command-199 +echo command-200 +echo command-201 +echo command-202 +echo command-203 +echo command-204 +echo command-205 +echo command-206 +echo command-207 +echo command-208 +echo command-209 +echo command-210 +echo command-211 +echo command-212 +echo command-213 +echo command-214 +echo command-215 +echo command-216 +echo command-217 +echo command-218 +echo command-219 +echo command-220 +echo command-221 +echo command-222 +echo command-223 +echo command-224 +echo command-225 +echo command-226 +echo command-227 +echo command-228 +echo command-229 +echo command-230 +echo command-231 +echo command-232 +echo command-233 +echo command-234 +echo command-235 +echo command-236 +echo command-237 +echo command-238 +echo command-239 +echo command-240 +echo command-241 +echo command-242 +echo command-243 +echo command-244 +echo command-245 +echo command-246 +echo command-247 +echo command-248 +echo command-249 +echo command-250 +echo command-251 +echo command-252 +echo command-253 +echo command-254 +echo command-255 +echo command-256 +echo command-257 +echo command-258 +echo command-259 +echo command-260 +echo command-261 +echo command-262 +echo command-263 +echo command-264 +echo command-265 +echo command-266 +echo command-267 +echo command-268 +echo command-269 +echo command-270 +echo command-271 +echo command-272 +echo command-273 +echo command-274 +echo command-275 +echo command-276 +echo command-277 +echo command-278 +echo command-279 +echo command-280 +echo command-281 +echo command-282 +echo command-283 +echo command-284 +echo command-285 +echo command-286 +echo command-287 +echo command-288 +echo command-289 +echo command-290 +echo command-291 +echo command-292 +echo command-293 +echo command-294 +echo command-295 +echo command-296 +echo command-297 +echo command-298 +echo command-299 +echo command-300 +echo command-301 +echo command-302 +echo command-303 +echo command-304 +echo command-305