|
| 1 | +package datadog.trace.core.util |
| 2 | + |
| 3 | + |
| 4 | +import spock.lang.Specification |
| 5 | + |
| 6 | +class StackTracesTest extends Specification { |
| 7 | + |
| 8 | + def "test stack trace truncation: #limit"() { |
| 9 | + given: |
| 10 | + def trace = """ |
| 11 | +Exception in thread "main" com.example.app.MainException: Unexpected application failure |
| 12 | + at com.example.app.Application\$Runner.run(Application.java:102) |
| 13 | + at com.example.app.Application.lambda\$start\$0(Application.java:75) |
| 14 | + at java.base/java.util.Optional.ifPresent(Optional.java:178) |
| 15 | + at com.example.app.Application.start(Application.java:74) |
| 16 | + at com.example.app.Main.main(Main.java:21) |
| 17 | + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) |
| 18 | + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) |
| 19 | + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) |
| 20 | + at java.base/java.lang.reflect.Method.invoke(Method.java:566) |
| 21 | + at com.example.launcher.Bootstrap.run(Bootstrap.java:39) |
| 22 | + at com.example.launcher.Bootstrap.main(Bootstrap.java:25) |
| 23 | + at com.example.internal.\$Proxy1.start(Unknown Source) |
| 24 | + at com.example.internal.Initializer\$1.run(Initializer.java:47) |
| 25 | + at com.example.internal.Initializer.lambda\$init\$0(Initializer.java:38) |
| 26 | + at java.base/java.util.concurrent.Executors\$RunnableAdapter.call(Executors.java:515) |
| 27 | + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) |
| 28 | + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) |
| 29 | + at java.base/java.util.concurrent.ThreadPoolExecutor\$Worker.run(ThreadPoolExecutor.java:628) |
| 30 | + at java.base/java.lang.Thread.run(Thread.java:834) |
| 31 | + at com.example.synthetic.Helper.access\$100(Helper.java:14) |
| 32 | +Caused by: com.example.db.DatabaseException: Failed to load user data |
| 33 | + at com.example.db.UserDao.findUser(UserDao.java:88) |
| 34 | + at com.example.db.UserDao.lambda\$cacheLookup\$1(UserDao.java:64) |
| 35 | + at com.example.cache.Cache\$Entry.computeIfAbsent(Cache.java:111) |
| 36 | + at com.example.cache.Cache.get(Cache.java:65) |
| 37 | + at com.example.service.UserService.loadUser(UserService.java:42) |
| 38 | + at com.example.service.UserService.lambda\$loadUserAsync\$0(UserService.java:36) |
| 39 | + at com.example.util.SafeRunner.run(SafeRunner.java:27) |
| 40 | + at java.base/java.util.concurrent.Executors\$RunnableAdapter.call(Executors.java:515) |
| 41 | + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) |
| 42 | + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) |
| 43 | + at java.base/java.util.concurrent.ThreadPoolExecutor\$Worker.run(ThreadPoolExecutor.java:628) |
| 44 | + at java.base/java.lang.Thread.run(Thread.java:834) |
| 45 | + at com.example.synthetic.UserDao\$1.run(UserDao.java:94) |
| 46 | + at com.example.synthetic.UserDao\$1.run(UserDao.java:94) |
| 47 | + at com.example.db.ConnectionManager.getConnection(ConnectionManager.java:55) |
| 48 | +Suppressed: java.io.IOException: Resource cleanup failed |
| 49 | + at com.example.util.ResourceManager.close(ResourceManager.java:23) |
| 50 | + at com.example.service.UserService.lambda\$loadUserAsync\$0(UserService.java:38) |
| 51 | + ... 3 more |
| 52 | +Caused by: java.nio.file.AccessDeniedException: /data/user/config.json |
| 53 | + at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) |
| 54 | + at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) |
| 55 | + at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116) |
| 56 | + at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219) |
| 57 | + at java.base/java.nio.file.Files.newByteChannel(Files.java:375) |
| 58 | + at java.base/java.nio.file.Files.newInputStream(Files.java:489) |
| 59 | + at com.example.util.FileUtils.readFile(FileUtils.java:22) |
| 60 | + at com.example.util.ResourceManager.close(ResourceManager.java:21) |
| 61 | + ... 3 more |
| 62 | +""" |
| 63 | + |
| 64 | + expect: |
| 65 | + StackTraces.truncate(trace, limit) == expected |
| 66 | + |
| 67 | + where: |
| 68 | + limit | expected |
| 69 | + 1000 | """ |
| 70 | +Exception in thread "main" com.example.app.MainException: Unexpected application failure |
| 71 | + at c.e.a.Application\$Runner.run(Application.java:102) |
| 72 | + at c.e.a.Application.lambda\$start\$0(Application.java:75) |
| 73 | + at j.b.u.Optional.ifPresent(Optional.java:178) |
| 74 | + at c.e.a.Application.start(Application.java:74) |
| 75 | + at c.e.a.Main.main(Main.java:21) |
| 76 | + at s.r.NativeMethodAccessorImpl.invoke0(Native Method) |
| 77 | + at s.r.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) |
| 78 | + at s.r.Delegat |
| 79 | + ... trace centre-cut to 1000 chars ... |
| 80 | +ToIOException(UnixException.java:90) |
| 81 | + at j.b.n.f.UnixException.rethrowAsIOException(UnixException.java:111) |
| 82 | + at j.b.n.f.UnixException.rethrowAsIOException(UnixException.java:116) |
| 83 | + at j.b.n.f.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219) |
| 84 | + at j.b.n.f.Files.newByteChannel(Files.java:375) |
| 85 | + at j.b.n.f.Files.newInputStream(Files.java:489) |
| 86 | + at c.e.u.FileUtils.readFile(FileUtils.java:22) |
| 87 | + at c.e.u.ResourceManager.close(ResourceManager.java:21) |
| 88 | + ... 3 more |
| 89 | +""" |
| 90 | + 2500 | """ |
| 91 | +Exception in thread "main" com.example.app.MainException: Unexpected application failure |
| 92 | + at c.e.a.Application\$Runner.run(Application.java:102) |
| 93 | + at c.e.a.Application.lambda\$start\$0(Application.java:75) |
| 94 | + at j.b.u.Optional.ifPresent(Optional.java:178) |
| 95 | + at c.e.a.Application.start(Application.java:74) |
| 96 | + at c.e.a.Main.main(Main.java:21) |
| 97 | + at s.r.NativeMethodAccessorImpl.invoke0(Native Method) |
| 98 | + at s.r.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) |
| 99 | + at s.r.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) |
| 100 | + ... 8 trimmed ... |
| 101 | + at j.b.u.c.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) |
| 102 | + at j.b.u.c.ThreadPoolExecutor\$Worker.run(ThreadPoolExecutor.java:628) |
| 103 | + at j.b.l.Thread.run(Thread.java:834) |
| 104 | + at c.e.s.Helper.access\$100(Helper.java:14) |
| 105 | +Caused by: com.example.db.DatabaseException: Failed to load user data |
| 106 | + at c.e.d.UserDao.findUser(UserDao.java:88) |
| 107 | + at c.e.d.UserDao.lambda\$cacheLookup\$1(UserDao.java:64) |
| 108 | + at c.e.c.Cache\$Entry.computeIfAbsent(Cache.java:111) |
| 109 | + at c.e.c.Cache.get(Cache.java:65) |
| 110 | + at c.e.s.UserService.loadUser(UserService.java:42) |
| 111 | + at c.e.s.UserService.lambda\$loadUserAsync\$0(UserService.java:36) |
| 112 | + at c.e.u.SafeRunner.run(SafeRunner.java:27) |
| 113 | + at j.b.u.c.Executors\$RunnableAdapter.call(Executors.java:515) |
| 114 | + ... 3 trimmed ... |
| 115 | + at j.b.l.Thread.run(Thread.java:834) |
| 116 | + at c.e.s.UserDao\$1.run(UserDao.java:94) |
| 117 | + at c.e.s.UserDao\$1.run(UserDao.java:94) |
| 118 | + at c.e.d.ConnectionManager.getConnection(ConnectionManager.java:55) |
| 119 | +Suppressed: java.io.IOException: Resource cleanup failed |
| 120 | + at c.e.u.ResourceManager.close(ResourceManager.java:23) |
| 121 | + at c.e.s.UserService.lambda\$loadUserAsync\$0(UserService.java:38) |
| 122 | + ... 3 more |
| 123 | +Caused by: java.nio.file.AccessDeniedException: /data/user/config.json |
| 124 | + at j.b.n.f.UnixException.translateToIOException(UnixException.java:90) |
| 125 | + at j.b.n.f.UnixException.rethrowAsIOException(UnixException.java:111) |
| 126 | + at j.b.n.f.UnixException.rethrowAsIOException(UnixException.java:116) |
| 127 | + at j.b.n.f.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219) |
| 128 | + at j.b.n.f.Files.newByteChannel(Files.java:375) |
| 129 | + at j.b.n.f.Files.newInputStream(Files.java:489) |
| 130 | + at c.e.u.FileUtils.readFile(FileUtils.java:22) |
| 131 | + at c.e.u.ResourceManager.close(ResourceManager.java:21) |
| 132 | + ... 3 more |
| 133 | +""" |
| 134 | + 3000 | """ |
| 135 | +Exception in thread "main" com.example.app.MainException: Unexpected application failure |
| 136 | + at c.e.a.Application\$Runner.run(Application.java:102) |
| 137 | + at c.e.a.Application.lambda\$start\$0(Application.java:75) |
| 138 | + at j.b.u.Optional.ifPresent(Optional.java:178) |
| 139 | + at c.e.a.Application.start(Application.java:74) |
| 140 | + at c.e.a.Main.main(Main.java:21) |
| 141 | + at s.r.NativeMethodAccessorImpl.invoke0(Native Method) |
| 142 | + at s.r.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) |
| 143 | + at s.r.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) |
| 144 | + at j.b.l.r.Method.invoke(Method.java:566) |
| 145 | + at c.e.l.Bootstrap.run(Bootstrap.java:39) |
| 146 | + at c.e.l.Bootstrap.main(Bootstrap.java:25) |
| 147 | + at c.e.i.\$Proxy1.start(Unknown Source) |
| 148 | + at c.e.i.Initializer\$1.run(Initializer.java:47) |
| 149 | + at c.e.i.Initializer.lambda\$init\$0(Initializer.java:38) |
| 150 | + at j.b.u.c.Executors\$RunnableAdapter.call(Executors.java:515) |
| 151 | + at j.b.u.c.FutureTask.run(FutureTask.java:264) |
| 152 | + at j.b.u.c.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) |
| 153 | + at j.b.u.c.ThreadPoolExecutor\$Worker.run(ThreadPoolExecutor.java:628) |
| 154 | + at j.b.l.Thread.run(Thread.java:834) |
| 155 | + at c.e.s.Helper.access\$100(Helper.java:14) |
| 156 | +Caused by: com.example.db.DatabaseException: Failed to load user data |
| 157 | + at c.e.d.UserDao.findUser(UserDao.java:88) |
| 158 | + at c.e.d.UserDao.lambda\$cacheLookup\$1(UserDao.java:64) |
| 159 | + at c.e.c.Cache\$Entry.computeIfAbsent(Cache.java:111) |
| 160 | + at c.e.c.Cache.get(Cache.java:65) |
| 161 | + at c.e.s.UserService.loadUser(UserService.java:42) |
| 162 | + at c.e.s.UserService.lambda\$loadUserAsync\$0(UserService.java:36) |
| 163 | + at c.e.u.SafeRunner.run(SafeRunner.java:27) |
| 164 | + at j.b.u.c.Executors\$RunnableAdapter.call(Executors.java:515) |
| 165 | + at j.b.u.c.FutureTask.run(FutureTask.java:264) |
| 166 | + at j.b.u.c.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) |
| 167 | + at j.b.u.c.ThreadPoolExecutor\$Worker.run(ThreadPoolExecutor.java:628) |
| 168 | + at j.b.l.Thread.run(Thread.java:834) |
| 169 | + at c.e.s.UserDao\$1.run(UserDao.java:94) |
| 170 | + at c.e.s.UserDao\$1.run(UserDao.java:94) |
| 171 | + at c.e.d.ConnectionManager.getConnection(ConnectionManager.java:55) |
| 172 | +Suppressed: java.io.IOException: Resource cleanup failed |
| 173 | + at c.e.u.ResourceManager.close(ResourceManager.java:23) |
| 174 | + at c.e.s.UserService.lambda\$loadUserAsync\$0(UserService.java:38) |
| 175 | + ... 3 more |
| 176 | +Caused by: java.nio.file.AccessDeniedException: /data/user/config.json |
| 177 | + at j.b.n.f.UnixException.translateToIOException(UnixException.java:90) |
| 178 | + at j.b.n.f.UnixException.rethrowAsIOException(UnixException.java:111) |
| 179 | + at j.b.n.f.UnixException.rethrowAsIOException(UnixException.java:116) |
| 180 | + at j.b.n.f.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219) |
| 181 | + at j.b.n.f.Files.newByteChannel(Files.java:375) |
| 182 | + at j.b.n.f.Files.newInputStream(Files.java:489) |
| 183 | + at c.e.u.FileUtils.readFile(FileUtils.java:22) |
| 184 | + at c.e.u.ResourceManager.close(ResourceManager.java:21) |
| 185 | + ... 3 more |
| 186 | +""" |
| 187 | + } |
| 188 | +} |
0 commit comments